我想测试一个具有高圈复杂度(叹气)的方法,我希望在测试类中有一个类,以便方法测试类作为树中的节点出现。是否有可能与Nunit以及如何?
MyEntityTests
|
L_ MyComplexMethodTests
L when_some_condition_than
L when_some_other_condition_than
[TestFixture]
public class MyEntityTests
{
[TestFixture]
public class MyComplexMethodTests
{
[Test]
public void when_some_condition_than() {}
etc.....
}
}
答案 0 :(得分:18)
您可以使用嵌套类来完成它,与您问题中的示例代码非常相似。
您的代码的唯一区别是外部类不需要[TestFixture]
属性,如果它仅用于结构并且本身没有测试。
您还可以让所有内部类共享一个Setup
方法,方法是将它放入外部类并让内部类继承自外部类:
using NUnit.Framework;
namespace My.Namespace
{
public class MyEntityTests
{
[SetUp]
public void Setup()
{
}
[TestFixture]
public class MyComplexMethodTests : MyEntityTests
{
[Test]
public void when_some_condition_than()
{
}
[Test]
public void when_some_other_condition_then()
{
}
}
}
}
在NUnit GUI中,此测试类将如下所示:
答案 1 :(得分:6)
我使用(滥用?)命名空间来获取此行为:
namespace MyEntityTests.MyComplexMethodTests
{
[TestFixture]
public class when_some_condition_than
{
[Test]
public void it_should_do_something()
{
}
}
[TestFixture]
public class when_some_other_condition_than
{
[Test]
public void it_should_do_something_else()
{
}
}
}
哪个会给你:
MyEntityTests
- MyComplexMethodTests
- when_some_condition_than
- it_should_do_something
- when_some_other_condition_than
- it_should_do_something_else
在这种情况下,我通常会使用TestFixture来定义测试的上下文。
答案 2 :(得分:1)
听起来您要测试一个类,但是要运行两组/类型的测试。最简单的方法可能是创建两个TestFixtures,每个一个。另一种方法是将每个测试放入一个类别。
编辑:如果所有测试都使用相同的方法,则一个选项是使用TestCase属性并指定每个测试的参数(以及预期结果).GUI将嵌套每个集合TestCase参数在该测试名称的单个实例下。这假设您的所有测试都表现相似,这意味着相同的基本Asserts或ExpectedExceptions。