我有个问题。我有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);
}
}
}
如何在一个单位测试中存储一个值,并在另一个单位测试中使用该值。
答案 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");
...
}