NUnit 有一个OneTimeSetup 属性 https://docs.nunit.org/articles/nunit/writing-tests/attributes/onetimesetup.html。我正在尝试思考一些可以使用它的场景。但是,我在网上找不到任何 GitHub 示例(甚至我的链接也没有示例)。
假设我有一些这样的代码:
[TestFixture]
public class MyFixture
{
IProduct Product;
[OneTimeSetUp]
public void OneTimeSetUp()
{
IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
Product = fixture.Create<Product>();
}
[Test]
public void Test1()
{
//Use Product here
}
[Test]
public void Test2()
{
//Use Product here
}
[Test]
public void Test3()
{
//Use Product here
}
}
这是在 OneTimeSetup 中初始化变量的有效场景吗?即因为在这种情况下,所有测试方法都使用 Product 吗?
是的。不。 :-)
Yes... [OneTimeSetUp]
按您的预期工作。它在您的所有测试之前执行一次,并且您的所有测试将使用相同的产品。
不...您可能不应该以这种方式使用它,假设 Product 的初始化成本不是非常高 - 它可能不是,因为它基于模拟。
OneTimeSetUp
最好仅用于成本极高的步骤,例如创建数据库。事实上,它在纯粹的单元测试中几乎没有什么用处。
您可能会想,“如果它的效率更高一点,为什么不一直使用它呢?”答案是您正在编写测试,这意味着您实际上并没有know被测试的代码会做什么。您的一项测试可能会改变通用产品,甚至可能使其处于无效状态。您的其他测试将开始失败,从而很难找出问题的根源。几乎总是,您想开始使用SetUp
,这将为您的每一项测试创建一个单独的产品。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)