在单元测试中保持价值

时间:2012-10-24 20:19:07

标签: c# unit-testing

我有个问题。我有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);            
        }
    }
}

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

3 个答案:

答案 0 :(得分:8)

一般情况下,你不应该像这样编写测试。您无法确保您的测试以任何特定顺序运行,因此没有很好的方法来执行此操作。

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

答案 1 :(得分:2)

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

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

隔离中考虑您的测试 - 每个测试都是一个独立的测试,它可以设置,执行和清理所有必要的操作。

答案 2 :(得分: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");
   ...
}