public enum SystemConstants
{
SystemTypeDocument,
ApplicationTypeDocument
}
public interface ISystemBaseObject
{
SystemConstants SystemType();
}
public class ExploreMockExample
{
ISystemBaseObject systemBaseObject;
public ExploreMockExample(ISystemBaseObject systemObject)
{
systemBaseObject = systemObject;
}
public int MethodToBeTested()
{
if (systemBaseObject.SystemType() == SystemConstants.SystemTypeDocument)
{
return 1;
}
else
{
return 2;
}
}
}
将 Intellitest 与 NUnit3 一起使用。
当我右键单击 MethodToBeTested,然后选择运行 intellitest 时,预期的结果是 Intellitetest 测试应该实现最大的代码覆盖率并使用有效的测试数据创建测试用例以覆盖 if (systemBaseObject.SystemType() == SystemConstants.SystemTypeDocument) 和 else 分支语句.
一些博客建议为类创建工厂并创建接口的模拟对象。并使用 PexChoose 静态方法让 pex 框架探索代码以实现最大的代码覆盖率。
[PexFactoryMethod(typeof(ExploreMockExample))]
public static ExploreMockExample CreateMock()
{
var mockComosBaseObject = new Mock<ISystemBaseObject>();
mockComosBaseObject.Setup(c =>c.SystemType()).
Returns(PexChoose.EnumValue<SystemConstants>(nameof(SystemConstants)));
return new ExploreMockExample(mockComosBaseObject.Object);
}
通过上述设置,Intellitet 可以只生成一个覆盖 if 语句的测试用例 if (systemBaseObject.SystemType() == SystemConstants.SystemTypeDocument)。
可以做什么,以允许 Intellitest 创建测试用例,该测试用例将覆盖结果值为 2 的 else 语句。