我喜欢扩展我的Assert.AreEqual到许多不同的类,当然已知的是CollectionAssert,但我可以想到更多,例如:ImageAssert,XmlAssert等。
您是否创建了自己的Assert类?你想创造什么样的新品?
答案 0 :(得分:4)
我喜欢Assert类的感觉,但想要一些更适合作为通用验证框架的东西。我从Roger Alsing的article开始使用扩展方法,现在有一个类似于以下的系统:
Enforce.That(variable).IsNotNull();
Enforce.That(variable).IsInRange(10, 20);
Enforce.That(variable).IsTypeOf(typeof(System.String));
etc.
如果执行失败,则会抛出异常。我一直在考虑重构,以便我也可以合并一个不会引发异常的非关键评估。有些人喜欢Check.That作为Enforce的变种。这会返回布尔值,但扩展方法具有相同的签名。
到目前为止,我喜欢这种方法的是,我可以在单元测试中使用它们,以及在我的实际代码中进行预验证和后验证问题,而无需引用Microsoft.VisualStudio.QualityTools.UnitTestFramework部件。我把它放在我的根组件中,用于我的应用程序框架,Enforce是根,所以它很容易到达。
答案 1 :(得分:4)
这是我的解决方案:
using MyStuff;
using A = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
namespace Mytestproj.Tests
{
public static class Assert
{
public static void AreEqual(object expected, object actual)
{
A.AreEqual(expected, actual);
}
// my extension
public static void AreEqual(MyEnum expected, int actual)
{
A.AreEqual((int)expected, actual);
}
public static void IsTrue(bool o)
{
A.IsTrue(o);
}
public static void IsFalse(bool o)
{
A.IsFalse(o);
}
public static void AreNotEqual(object notExpected, object actual)
{
A.AreNotEqual(notExpected, actual);
}
public static void IsNotNull(object o)
{
A.IsNotNull(o);
}
public static void IsNull(object o)
{
A.IsNull(o);
}
}
}
答案 2 :(得分:0)
我的很多测试都围绕加载一个具有已知良好状态的对象(如CuttingPath)。执行测试,然后将结果与加载的对象进行比较。如果它们不同,则会发生某些事情,导致代码发生变化。
这种方法可以节省大量时间,并在需要时进行自定义比较。
答案 3 :(得分:0)
我认为如果你重构你的测试以减少重复,那么你最终会创建自己的框架作为副产品,当然你的测试框架将拥有在你的上下文中有意义的断言帮助。
我想到的一个例子是在测试xhtml报告时,我们最终得到了类似的测试:
assertCoverageEquals(45.5);
断言覆盖的背后是:
assertPercentage(COVERAGE_ID, 45.5);
然后在那之后使用xpath来获取值,另一种方法知道格式化百分比是什么。
答案 4 :(得分:0)
我刚刚在上面写的ImageAssert添加了一个实现(在我的问题中) 我很乐意听到更多这样的样本