使用InteliTest自动生成的测试类时,如何解决单元测试方法?

时间:2018-07-17 09:48:39

标签: c# unit-testing visual-studio-2017 pex

我试图了解Visual Studio中automated测试类的生成。我正在使用Microsoft Plex Framework。这是Pex框架的详细信息。 https://www.microsoft.com/en-us/research/project/pex-and-moles-isolation-and-white-box-unit-testing-for-net/

我使用了如下所示的代码

public class AuditRepository:BaseDataRepository<AuditItem, int>, IAuditRepository
{
    public AuditRepository(string connString, IContainerFactory containerFactory) : base(connString, containerFactory)
    {
    }

    public IEnumerable GetTopAudit(int topCount)
    {
        const string sql = "SELECT TOP ({0}) * FROM audit ORDER BY CreatedTime DESC";
        return Query(string.Format(sql, topCount));
    }
}

我已使用InteliTest为上述方法创建unit test,并自动生成了test files and methods,如下所示

/// <summary>This class contains parameterized unit tests for AuditRepository</summary>
[PexClass(typeof(AuditRepository))]
[PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
[PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
[TestClass]
public partial class AuditRepositoryTest
{
    /// <summary>Test stub for GetTopAudit(Int32)</summary>
    [PexMethod]
    public IEnumerable GetTopAuditTest([PexAssumeUnderTest]AuditRepository target, int topCount)
    {
        IEnumerable result = target.GetTopAudit(topCount);
        return result;
        // TODO: add assertions to method AuditRepositoryTest.GetTopTest(AuditRepository, Int32)
    }
}

现在,当我尝试使用InteliTest运行测试时,它会显示警告并建议通过添加以下代码来进行修复[基本上在单击“修复”按钮时生成的代码下方]

public static partial class AuditRepositoryFactory
{
    /// <summary>A factory for Radiometer.RadCon.RAP.Repository.AuditRepository instances</summary>
    [PexFactoryMethod(typeof(AuditRepository))]
    public static AuditRepository Create(string connString_s, IContainerFactory containerFactory_iContainerFactory)
    {
        AuditRepository auditRepository
           = new AuditRepository(connString_s, containerFactory_iContainerFactory);
        return auditRepository;

        // TODO: Edit factory method of AuditRepository
        // This method should be able to configure the object in all possible ways.
        // Add as many parameters as needed,
        // and assign their values to each field by using the API.
    }
}

我无法理解屏幕后面发生了什么,在下面的注释行下面是什么意思

  

// TODO:编辑AuditRepository的工厂方法

     

//此方法应该能够以所有可能的方式配置对象。

     

//根据需要添加任意数量的参数,

     

//,并使用API​​将其值分配给每个字段。

1 个答案:

答案 0 :(得分:1)

您了解工厂模式是什么吗?

这些评论对如何创建工厂方法提出了建议。代码生成不足以知道如何使用此功能,因此注释为您提供了提示。

顺便说一句,您可能应该从工厂方法返回一个接口,以简化测试。

public static IAuditRepository Create(string connString_s, IContainerFactory containerFactory_iContainerFactory)
{ ... }