Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何为测试框架设置测试?_C#_Testing_Tdd_Mstest - Fatal编程技术网

C# 我应该如何为测试框架设置测试?

C# 我应该如何为测试框架设置测试?,c#,testing,tdd,mstest,C#,Testing,Tdd,Mstest,我目前正在构建一个相对轻量级的框架,以帮助指定预期的代码覆盖率,并确保覆盖率得到满足(或明确声明为不需要) 然而,当自动实现的测试失败时测试框架有点棘手,因为通常情况下,您希望通过测试是件好事,而测试失败是件坏事 例如: public interface IDesigned { void DoFoo(); } [ClassTestRequirements(Targets.Methods, "IsNotImplemented")] public interface ITestsOfDes

我目前正在构建一个相对轻量级的框架,以帮助指定预期的代码覆盖率,并确保覆盖率得到满足(或明确声明为不需要)

然而,当自动实现的测试失败时测试框架有点棘手,因为通常情况下,您希望通过测试是件好事,而测试失败是件坏事

例如:

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.
    */
}
IDesigned公共接口{
void DoFoo();
}
[ClassTestRequirements(Targets.Methods,“IsNotImplemented”)]
公共接口ITestsof设计:IDesigned
{
}
公共类Foo:IDesigned
{
}
[测试类]
[采用要求(类型(ITestsof designed)、类型(IDesigned))]
公共类测试仪:为
{
/* 
*验证测试人员是否执行了其应执行的操作(当前
*不)是在基类中设置的。
*/
}
ProvidesCoverage是一个抽象基类,它包含一个测试方法,该测试方法使用上面的代码验证Tester中有一个用
[Covers(nameof(IDesigned.DoFo),“IsNotImplemented”)]
修饰的方法,该方法执行任何操作-未选中。还有一种机制,通过该机制,可以设置测试测试人员来检查所有使用
IProvidesCoverage
修饰的类是否确实验证了它们的测试

显然,在上面的场景中,
ProvidesCoverage.ValidateTests()
失败。更重要的是,它感觉像是一个想要执行的有效测试。但理想情况下,我希望配置一个场景,其中这些测试不一定被视为实际测试(尽管使用
TestClass
/
TestMethod
等修饰),但外部(实际)测试运行它们并预期失败


我怎么能得到这个?如果我不能,我应该如何测试这样的项目,因为这样做的目的是导致某些测试失败,失败有时是合法的通过。

如果测试失败,那么您测试的代码是错误的-周期。代码覆盖率是其中一个重要的细节。我的单元测试有时对一个方法有8到10个测试,它们都很重要,没有一个可以删除。在这种情况下,代码覆盖率没有帮助,检测缺失的测试代码覆盖率不是目标。事实上,把它作为一个目标是危险的,很容易获得覆盖率,很难获得验证覆盖率的测试,更糟糕的是,不知道它是否没有得到很好的测试,因为有人让它获得覆盖率。我也发现查看覆盖率很有用,但我不会让它失败。不要担心代码覆盖率。代码覆盖率仅适用于在编写生产代码后编写测试的开发人员。如果您先编写测试-您的测试覆盖率将始终为100%。如果您在之后编写测试-您需要一些方法来检查您的测试是否会在生产代码中发生更改时失败-因此您将对其进行更改。如果您执行TDD(即先测试,后代码),您就不再需要担心覆盖率-高覆盖率将是非常好和广泛的测试套件的副产品。