IntelliTest的Microsoft 文档说:
IntelliTest 探索您的 .NET 代码以生成测试数据和一套单元测试。对于代码中的每个语句,都会生成一个测试输入来执行该语句。对代码中的每个条件分支执行案例分析。例如,
if
分析语句、断言和所有可能引发异常的操作。此分析用于为每个方法的参数化单元测试生成测试数据,从而创建具有高代码覆盖率的单元测试。
我正在使用 Visual Studio 2017。我在我的方法中右键单击,选择“IntelliTest”,然后选择“Create IntelliTest”。我接受了弹出对话框中的所有默认设置并单击“确定”。
public static int ScanInternalInbox()
{
if (<code removed>)
{
<code removed>;
}
<code removed>;
try
{
<code removed>;
}
catch (Exception e)
{
<code removed>;
return 0;
}
<code removed>;
try
{
<code removed>;
}
catch (Exception e)
{
<code removed>;
}
<code removed>;
foreach (<code removed>)
{
<code removed>;
if (<code removed>)
{
if (<code removed>)
{
<code removed>;
if (<code removed>)
{
foreach (<code removed>)
{
<code removed>;
if (<code removed>)
{
if (<code removed>)
{
<code removed>;
}
}
}
if (<code removed>)
{
if (<code removed>)
{
<code removed>;
}
else
{
<code removed>;
}
}
}
else
{
<code removed>;
}
}
else
{
<code removed>;
}
}
else
{
<code removed>;
}
}
<code removed>;
}
那么,为什么我的方法有很多很多(太多)if
s 只是生成这个单元测试代码?
public partial class HMR_AgentTest {
/// <summary>Test stub for ScanInternalInbox()</summary>
[PexMethod]
public int ScanInternalInboxTest() {
int result = global::HMR_Agent.HMR_Agent.ScanInternalInbox();
return result;
// TODO: add assertions to method HMR_AgentTest.ScanInternalInboxTest()
}
}
我希望为每个测试至少进行一次测试if
,以(几乎)完全覆盖代码。我做错什么了吗?有没有办法按照微软声称的方式生成默认测试?
编辑
我现在也运行 IntelliTest,它生成了以下代码:
public partial class HMR_AgentTest {
[TestMethod]
[PexGeneratedBy(typeof(HMR_AgentTest))]
[PexRaisedException(typeof(TypeInitializationException))]
public void ScanInternalInboxTestThrowsTypeInitializationException908()
{
int i;
i = this.ScanInternalInboxTest();
Assert.AreEqual<int>(-1, i);
}
}
测试失败是因为抛出了异常,即使测试期望抛出异常。