测试依赖于NUnit的常用功能

时间:2010-08-03 11:34:24

标签: nunit integration-testing

我有一些初始化代码来使用我的API。初始化可能会失败,我想在NUnit测试中测试它。

初始化后,可以使用API​​。我也在测试API,但我的所有测试方法都将使用相同的常见初始化代码。

我最理想的是这种行为:

  1. 运行初始化测试。
  2. 如果[1]成功,则运行其他测试。
  3. 在[1]失败的所有情况下,所有其他测试也会失败。但有价值的信息是[1]失败了。这就是我最有可能找到问题的地方。如果其他测试可以标记出来会很好吗?或某事,表明他们没有按照他们所依赖的功能执行没有通过测试。

    我知道测试不应该是脆弱的。但我无法解决这样一个事实,即初始化代码对于正确执行其他功能是必要的。

    这是一个更普遍的问题,其中某些功能取决于其他功能。 “其他功能”通常用于通过根据它进行所有测试失败来提供任何实际价值。如果“其他功能”将单独测试会更好。

4 个答案:

答案 0 :(得分:2)

好的,我会怎么做......

将公共初始化放入Setup方法,因为它需要进行所有测试。如果初始化引发错误,你会看到

  • 套件中的所有测试都失败了(我已经训练了一段时间,以确认可能是设置/拆卸已经抛出异常)。
  • 包含Setup方法的失败测试的堆栈跟踪。

如果这对你来说太隐晦了,你可以(虽然我不推荐)在同一个套件中添加一个好名字的空测试。如果该测试显示为绿色,则可以确保Setup / common init代码已成功。

[Test]
public void VerifySetup() {}

更新:看起来你有一个非常小众的要求。我不知道NUnit中的任何机制来指定这样的条件执行测试 - 例如仅当Test1通过时才运行Test2到10。

答案 1 :(得分:1)

我一直在与NUnit开发人员联系。如果不编写一个非常复杂的插件,目前是不可能的。该功能将在3.x代码库中的某处出现,但不会出现在2.5中。我会考虑写它,但不是暂时的。

答案 2 :(得分:0)

试试这个:

  1. 将“初始化测试”定义为TestCase

  2. 将所有其他测试作为此TestCase的子类

  3. 创建一个以特定顺序运行测试的套件,以便首先进行“初始化测试”。

答案 3 :(得分:-1)

我认为这很明显。问题是你很难分离出你的API职责。你有两个。初始化API和API执行。编写测试以获得这种依赖可能会让你失望。

所以我建议API创建一个初始化对象,然后创建各种命令对象来执行API。命令对象将在某种商店中,或者您可以动态创建。

API将使用模拟的初始化对象,它将使用模拟的命令对象。

初始化对象实际上没有任何依赖关系,除了你需要初始化的任何内容。

Command对象需要一个模拟的初始化对象。

<强> [编辑]

如果初始化测试失败,有两种方法可以使其他测试失败

  1. 将一个私有变量添加到测试用例中。 private isInitialized = false;。然后你的所有其他测试检查这个变量的状态,如果不是真的那么失败。

  2. 使用API​​类扩展您的测试用例。添加询问初始化状态的私有函数。

  3. 两者的清洁工是2.最快的实施是1.

    恕我直言当您必须以这种方式结合您的测试时,这可能是代码味道。如果你说它是一个集成测试。为什么要进行单独的初始化测试。集成更像是针对您的API运行某些操作。因此,每个集成测试必须初始化API。

    您可能想重新考虑级联故障情况。完成测试可能会产生太大的噪音。

    <强> [EDIT1a]

    我能看到满足您要求的唯一方法是extend NUnit。具体来看测试用例构建器测试装饰器

    链接日期为2008年3月,所以希望它不会过时。