1

假设我有充分的理由想要进行以下测试,我如何设置批准测试来命名 .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 文件。

4

1 回答 1

2

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

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

解决方法 #1 - NamerFactory (BaseTest.Test1.UnitTest1.approved.txt)

您可以将测试重写为

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

顺便说一句:如果您使用来自 myget https://www.myget.org/gallery/approvaltests的夜间构建,则使用 using 语句会更好

using (NamerFactory.AsEnvironmentSpecificTest(() => this.GetType().Name))
{
    Approvals.Verify(1);
}

解决方法 #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();
    }
}
于 2014-05-17T17:51:27.080 回答