我目前正在整合一个相对轻量级的框架,以帮助指定预期的代码覆盖率,并保证满足该覆盖范围(或明确说明不需要)。
但是,在自动实现测试应该失败时测试框架有点棘手,因为通常情况下,你希望通过测试是件好事而测试失败是件坏事。
一个例子是:
public interface IDesigned {
void DoFoo();
}
[ClassTestRequirements(Targets.Methods, "IsNotImplemented")]
public interface ITestsOfDesigned : IDesigned
{
}
public class Foo : IDesigned
{
}
[TestClass]
[AdoptsTestRequirements(typeof(ITestsOfDesigned), typeof(IDesigned))]
public class Tester : ProvidesCoverageFor<Foo>
{
/*
* Validation that Tester does what it's supposed to (it currently
* doesn't) is set up in the base class.
*/
}
ProvideCoverage是一个抽象基类,它包含一个测试方法,该方法使用上面的测试方法验证测试人员在其中使用[Covers(nameof(IDesigned.DoFo), "IsNotImplemented")]
修饰的方法,该方法执行任何操作 - 未检查。还有一种机制可以设置测试测试人员来检查用IProvidesCoverage<>
修饰的所有类实际验证他们的测试。
显然,在上面,方案应该是ProvidesCoverage<>.ValidateTests()
失败。还有什么感觉更像是想要执行的有效测试。但理想情况下,我想配置一个场景,其中这些测试不一定被视为实际测试(尽管用TestClass
/ TestMethod
等装饰)但是外部(实际)测试运行它们并期望失败。
我怎么能得到它?如果我不能, 我将如何我正在测试这样的项目,因为这样做的目的是导致某些测试失败,故障有时是合法的传递。