0

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>;
    }

那么,为什么我的方法有很多很多(太多)ifs 只是生成这个单元测试代码?

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);
}
  }

测试失败是因为抛出了异常,即使测试期望抛出异常。

4

1 回答 1

0

[PexMethod]有效地只是识别您要测试的功能。您需要第一次在 PexMethod 上右键单击并“IntelliTest -> Run IntelliTest”以生成.g.cs包含所有执行路径测试的子文件。

仅当您对更改执行路径或更改行为的代码进行更改时,您才再次“运行 IntelliTest”;如果你只是重构代码,你不需要生成新的测试代码,你只需像往常一样在文件中运行生成的[TestMethod]测试。g.cs

于 2017-11-27T23:57:10.137 回答