我非常清楚并同意测试不应相互依赖的观点。
然而,在这种情况下,我认为这将是有益的。
情况是被测系统需要遵循一步一步的过程(没有经过前面的步骤就无法跳到一个步骤)。 在理想的世界中,我们会让开发人员添加一个API以允许我们这样做,但是考虑到这些限制,这将无法完成。
目前正在进行的测试都是端到端的,有时难以分析失败的测试。
我的问题是:我是否有一种干净的方法可以将这些端到端测试分解为较小的测试,并对它们施加一些依赖?
我知道TestNG可以使用@DependOn表示法执行此操作,C#是否有类似的概念?
答案 0 :(得分:1)
从描述测试的方式来看:
答案 1 :(得分:0)
这里有几个概念可能有用:
这里的基本思想是将正在执行的场景与您正在进行的断言(即您正在测试的内容)分开。这实际上只是BDD,所以使用BDD Framework来帮助你可能是有意义的,尽管没有必要。使用NUnit,您可以编写类似这样的内容
[TestFixture]
public class ExampleTests
{
[SetUp]
public void ExecuteScenario()
{
GrabBucket();
AddApple();
AddOrange();
AddBanana();
}
[Test]
public void ThereShouldBeOneApple()
{
Assert.AreEqual(1, Count("Apple"));
}
[Test]
public void ThereShouldBeOneOrange()
{
Assert.AreEqual(1, "Orange");
}
[Test]
public void ThereShouldBeOneBanana()
{
Assert.AreEqual(1, "Banana");
}
[Test]
public void ThereShouldBeNoPomegranates()
{
Assert.AreEqual(0, "Pomegranate");
}
private void GrabBucket() { /* do stuff */ }
private void AddApple() { /* do stuff */ }
private void AddOrange() { /* do stuff */ }
private void AddBanana() { /* do stuff */ }
private int Count(string fruitType)
{
// Query the application state
return 0;
}
}
我意识到这并没有回答你提出的问题 - 这并没有将更大的集成测试分解成更小的单元 - 但它可以帮助你解决依赖问题;在这里,所有相关测试都取决于单个场景的执行,而不是之前执行的测试。
答案 2 :(得分:0)
我同意迄今为止的几乎所有评论,我最终选择的解决方案是使用nUnit作为框架,使用category属性来排序,而不是最干净或最'SOLID'的解决方案。试验。