C# 将抽象基本测试类与批准测试一起使用

C# 将抽象基本测试类与批准测试一起使用,c#,unit-testing,approval-tests,C#,Unit Testing,Approval Tests,假设我有很好的理由想做下面的测试,我如何设置批准测试来命名.approved文件UnitTest1.Test1.approved,而不是BaseTest.Test1.approved?谢谢 public abstract class BaseTest { [TestMethod] public void Test1() { Approvals.Verify(1); } [TestMethod] public void Test2(

假设我有很好的理由想做下面的测试,我如何设置批准测试来命名.approved文件
UnitTest1.Test1.approved
,而不是
BaseTest.Test1.approved
?谢谢

public abstract class BaseTest
{
    [TestMethod]
    public void Test1()
    {
        Approvals.Verify(1);
    }

    [TestMethod]
    public void Test2()
    {
        Approvals.Verify(2);
    }
}

[TestClass]
public class UnitTest1 : BaseTest
{
    public UnitTest1()
    {
        // some initialization
    }
}

[TestClass]
public class UnitTest2 : BaseTest
{
    public UnitTest2()
    {
        // some initialization
    }
}
==更新===

根据Llewellyn的建议,我在基类的ctor中添加了以下代码:

public BaseTest()
{
    NamerFactory.AdditionalInformation = GetType().Name;
}

正如预期的那样,我为每个测试获得单独的.approved文件。

这是一个有趣的假设。我假设您希望UnitTest1.Test1.approved和UnitTest2.Test1.approved

简而言之,答案并不确切,但有一些解决办法

变通方法#1-NamerFactory(BaseTest.Test1.UnitTest1.approved.txt) 你可以把测试改写成

[TestMethod]
public void Test2()
{
    NamerFactory.AdditionalInformation = this.GetType().Name;
    Approvals.Verify(2);
}
顺便说一句:如果您使用myget的夜间构建,那么使用using语句会更好

解决方法#2-从OutsideClass调用(UnitTest1.Test1.approved.txt) 您可以提取方法的大部分,然后从外部测试调用它。很可能您想要一个方法的所有功能,但仍然希望测试在扩展类中。批准调用不需要位于最顶层的测试方法中。例如:

public abstract class BaseTest
{
    public void Verify1()
    {
        // other code to do stuff
        Approvals.Verify(1);
    }

}

[TestClass]
public class UnitTest1 : BaseTest
{
    public UnitTest1()
    {
        // some initialization
    }
    [TestMethod]
    public void Test1()
    {
        Verify1();
    }
}

工作起来很有魅力。谢谢
public abstract class BaseTest
{
    public void Verify1()
    {
        // other code to do stuff
        Approvals.Verify(1);
    }

}

[TestClass]
public class UnitTest1 : BaseTest
{
    public UnitTest1()
    {
        // some initialization
    }
    [TestMethod]
    public void Test1()
    {
        Verify1();
    }
}