nUnit和xUnit.net之间的区别在哪里?开发其中两个有什么意义,不仅仅是一个?
我已经读过xUnit是由nUnit的发明者开发的:
xUnit.net是.NET Framework的单元测试工具。由NUnit的原始发明者撰写
另一方面:
NUnit是所有.Net语言的单元测试框架..当前的生产版本2.6,是这个基于xUnit的单元测试工具的第七个主要版本
那真相在哪里?
答案有点旧,所以我决定提供更新:在撰写本答案时,最新的NUnit版本是v3.5,xUnit.net是v2.1
两个框架都很棒,它们都支持并行测试运行(虽然以不同的方式),NUnit自2002年以来一直存在,它被广泛使用,文档齐全并且拥有大型社区,而xUnit.net更现代,更TDD在.net核心开发中具有附加性,可扩展性和趋势性。它也有很好的记录。
除此之外,我注意到的主要区别是xUnit.net运行测试方法的方式。所以,在NUnit中,我们有一个测试类和一组测试方法。 NUnit创建测试类的新实例,然后从同一实例运行所有测试方法。而xUnit.net为每个测试方法创建测试类的新实例。因此,不能使用字段或属性在测试方法之间共享数据,这是一种不好的做法,因为我们的测试方法将依赖于每个测试方法。其他在TDD中不可接受的。因此,如果您使用xunit.net,您可以确保您的测试方法完全隔离。
如果您愿意在测试方法中共享一些数据,xUnit会允许您这样做。因此,默认情况下,所有测试方法都是完全隔离的,但您可以在特定情况下故意破坏此隔离。我喜欢这种态度,这就是为什么我更喜欢它。
根据提到的关于测试类实例化的不同之处并行测试运行特性在2个框架中的工作方式不同。在NUnit.net中,单个类的测试方法将在单个线程中运行(不是并行),但它在单独的线程中运行每个类的测试。而xUnit.net在并行性方面没有限制,因为它为每个测试方法创建一个新实例。
xUnit Pros:xUnit遵循新概念,避免使用旧的“SetUp”和“TearDown”方法。它迫使我们使用IDisposable和构造函数,因为我们应该像.NET开发人员一样。 xUnit也有明确的上下文共享概念。
xUnit缺点:尚未实现获取测试上下文的可用性。
xUnit的一个好处是它在不同的类中找到测试,它并行运行它们。如果您有许多测试用例,这可以节省大量时间。
您当然可以关闭它,或者控制它的操作(线程数,每个类的线程数,每个程序集的测试数等等)
看看这个sample solution with two test projects, one using xUnit the other NUnit
您可以在xUnit here中阅读有关并行测试的更多信息