7

我有一个问题要问你们。我有 2 个单元测试正在调用 webservices。一个单元测试返回的值应该用于另一种单元测试方法

例子

namespace TestProject1
{
    public class UnitTest1
    {
        String TID = string.empty;

        public void test1
        {
           //calling webservices and code

           Assert.AreNotEqual(HoID, hID);
           TID = hID;
        }

        public void test2
        {
           //calling webservices and code            
           string HID = TID  // I need the TID value from the Above testcase here

           Assert.AreNotEqual(HID, hID);            
        }
    }
}

我如何在一个单元测试中存储一个值并在另一个单元测试中使用该值。

4

3 回答 3

8

一般来说,你不应该这样写你的测试。你不能确保你的测试会以任何特定的顺序运行,所以没有很好的方法来做到这一点。

而是使测试独立,但将公共部分重构为它自己的(非测试)方法,您可以将其作为其他测试的一部分调用。

于 2012-10-24T20:25:47.253 回答
2

不要重用任何值。运行测试的顺序通常是随机的(最常见的运行程序,如 NUnit 和 Resharper 的运行测试以随机顺序运行,有些甚至可能并行运行)。相反,只需在第二次测试中再次调用 Web 服务(即使这意味着有2 个Web 服务调用)并检索您需要的值。

每个测试(无论是单元测试还是集成测试)都应该有所有可用的数据/依赖项来运行。您永远不应该依赖其他测试来设置环境/数据,因为这不是它们的目的。

孤立地考虑你的测试——每个单独的测试都是一个独立的存在,它设置、执行和清理所有必要的东西来练习特定的场景。

于 2012-10-24T20:27:42.183 回答
2

下面是一个示例,按照 Oleksi 的大纲,你可以如何组织这个

String TID = string.empty;

[TestFixtureSetUp]
public void Given() {
  //calling webservices and code
  TID = hID;
  //calling webservices and code
}

[Test]
public void assertions_call_1() {
   ...
}

public void assertions_on_call_2() {
   if (string.IsNullOrEmpty(TID))
     Assert.Inconclusive("Prerequisites for test not met");
   ...
}
于 2012-10-24T20:38:25.267 回答