我有NUnit测试,它们在单元(快速(和集成(慢(测试之间分开。
现在我有测试,这些测试曾经针对 http 模拟(在这种情况下它们是单元测试(和真正的 Web 服务器(在这种情况下它们是集成测试(运行。
因为测试代码仅在使用的http对象中有所不同,所以我这样做:
async public Task HttpTest([Values("Real", "Mock")] string httpType)
{
var HttpObject = (httpType == "Mock") ? MockObject : RealObject;
...
}
这工作正常。但是现在我想创建单元测试和集成测试的类别,因为通常我只想运行(快速运行的(单元测试。
我不必按类别来做,但我也不知道任何其他方法。
我可以以某种方式选择是否要从命令行运行"真实"和/或"模拟"测试吗?
假设您希望以相同的方式运行测试运行中的所有测试,则可以在命令行上指定一个 run 参数,例如
nunit3-console.exe mytests.dll -p "http=Real"
然后,您可以使用
var httpParam = TestContext.Parameters.Get("http", "Real");
调用中的第二个参数是在命令行上未提供参数时使用的默认值。
如果这样做,则不需要多个测试用例或类别。