是否有一个c#testing-framework允许在一个语句中将多个断言集中在一起,如下所示:
Assert.AreEqual("valueA", object.A).AreEqual( "valueB", object.B)...
而不是
Assert.AreEqual("valueA", object.A);
Assert.AreEqual( "valueB", object.B);
...
这会使测试代码更短,对吧?
谢谢!
答案 0 :(得分:1)
我不认为您会找到这样的框架,因为大多数资源都会告诉您,在您编写的每个测试中保留一个<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<aside>
<button type="button" id="N">16-50mm</button>
<button type="button" id="J">25-75mm</button>
<button type="button" id="M">30-50mm</button>
<button type="button" id="G">50-120mm</button>
<button type="button" id="K">50-100mm</button>
<button type="button" id="A">75-200mm</button>
<button type="button" id="C">75-200mm</button>
<button type="button" id="F">75-150mm</button>
</aside>
<section class="N hide">
<figure>
<a href="A1.html"><img src="Images/000-001.jpg" alt="Image1 A1"></a>
<br>
<figcaption>Name</figcaption>
</figure>
</section>
<section class="J hide">
<figure>
<a href="A1.html"><img src="Images/000-001.jpg" alt="Image2 A1"></a>
<br>
<figcaption>Name2</figcaption>
</figure>
</section>
是一种很好的做法。
将多个断言链接在一起将使得更难理解哪些失败,失败(并且它们肯定会在某些时候失败)以及调试时更难。
如果您仍然决定这样做,那么将您正在使用的测试框架包装起来可以非常简单,并且可能看起来像这样:
assert
(这不是一个有效的例子,但只是关于如何实现这个的想法)。
无论哪种方式,&#39;更短的代码&#39;永远不应该是你的最终目标。目标应该具有可读代码。使用IDE的自动完成功能键入较少的内容(即:Visual Studio&#39;智能感知)。
...如果您仍然非常坚定地拥有最短的代码(我强烈建议不要这样做),那么就这样做:
public class Assertion {
public Assertion AssertEquals(object actual, object expected) {
// TODO: call your framework Assert.AreEqual() here
Assert.AreEqual(a, b);
return this;
}
}
// and now you can do something like this :
new Assertion()
.AssertEquals("objectA", object.A)
.AssertEquals("objectB", object.B);
然后你的测试将如下所示:
public static void a(object a, object b) {
Assert.AreEqual(a, b);
}
像我说的那样,这是不可读的......:/
答案 1 :(得分:1)
FluentAssertions可以让您执行以下操作:
string actual = "ABCDEFGHI";
actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);
(More examples on the documentation)
也就是说,多个断言充其量只是麻烦,将它们链接在一起会使得查看哪个断言失败更加困难。请参阅有关XUnit模式的Assertion Roulette。