使用带有批准测试的抽象基础测试类

时间:2014-05-15 18:04:35

标签: 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()
    {
        Approvals.Verify(2);
    }
}

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

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

=== UPDATE ===

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

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

按预期工作,我为每个测试获得单独的.approved文件。

1 个答案:

答案 0 :(得分:2)

这是一个有趣的假设。我假设你想要两个 UnitTest1.Test1.approved& UnitTest2.Test1.approved

简短的回答并不完全正确,但有一些解决方法。

WorkAround#1 - NamerFactory(BaseTest.Test1.UnitTest1.approved.txt)

您可以将测试重写为

[TestMethod]
public void Test2()
{
    NamerFactory.AdditionalInformation = this.GetType().Name;
    Approvals.Verify(2);
}

btw:如果你使用myget https://www.myget.org/gallery/approvaltests

中的每晚版本,那么使用using语句会更好
using (NamerFactory.AsEnvironmentSpecificTest(() => this.GetType().Name))
{
    Approvals.Verify(1);
}

WorkAround#2 - 从OutsideClass调用(UnitTest1.Test1.approved.txt)

您可以提取大部分方法,然后从外部测试中调用它。您很可能想要一个方法的所有功能,但仍希望测试在扩展类中。 Approvals调用不需要在最顶层的测试方法中。例如:

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();
    }
}