当前位置: 首页 > 编程语言 > C#

NUnitisnotcompatiblewithAssert.AreEqual分享

时间:2023-04-10 17:27:17 C#

NUnitisnotcompatiblewithAssert.AreEqual我是单元测试的新手,尤其是NUit。我只是在本书中输入一些引用Java和JUnit的示例。但我正在使用C#。问题是:我有一个类具有重写的方法,如Equals()和GetHashCode(),但是当我尝试将此类的两个对象与Assert.AreEqual()进行比较时,我的代码没有被调用,所以我得到异常。Assert.True(MyClass.Equals(MyClass2))确实运作良好。但我不想使用此构造来代替Assert.AreEqual()。问题出在哪?这是类:publicclassMoney{publicintamount;受保护的字符串货币;publicMoney(intamount,stringcurrency){this.amount=amount;this.currency=货币;}publicnewboolEquals(objectobj){if(obj==null)returnfalse;钱money=(Money)obj;return(amount==money.amount)&&(Currency().Equals(money.Currency()));}publicnewintGetHashCode(){return(string.Format("{0}{1}",amount,currency)).GetHashCode();}publicstaticMoneyDollar(intamount){returnnewMoney(amount,"USD");}publicstaticMoneyFranc(intamount){returnnewMoney(amount,"CHF");}publicMoneyTimes(intmultiplier){returnnewMoney(amount*multiplier,currency);}publicstringCurrency(){返回货币;}}而测试方法本体:[TestFixture]publicclassDollarTest{[Test]publicvoidTestMultiplication(){Moneyfive=Money.Dollar(5);Assert.True(Money.Dollar(10).Equals(five.Times(2)));//好的Assert.AreEqual(Money.Dollar(10),五次(2));//失败}}问题是你隐藏了Equals而不是覆盖它做得好-你的单元测试发现了一个错误?您的代码应该是:publicoverrideboolEquals(objectobj){Moneymoney=objasMoney;如果(金钱==null)返回假;返回(金额==money.amount&¤cy==money.currency);}(这将防止它抛出异常。)我已经简化了字符串相等性测试-运算符重载可能非常有帮助:)顺便说一下,你几乎肯定想要:编辑:我只是重新阅读你正在使用的例子从书中。这本书真的隐藏而不是覆盖Equals方法吗?我建议你买一本新书,如果是这样的话(除非它是一个故意使用hide是错误的例子!)......这是哪本书?我还发现实现IEquatable接口很混乱,它也有一个Equals(Tother)方法,给我带来了与上面相同的问题。我选择用上面的IEquaytable接口覆盖Equals方法的唯一原因是不必进行类型检查。最后我不得不使用下面的代码}publicoverrideboolEquals(objecto){if(oisCustomTag){returnEquals(oasCustomTag);}返回假;但后来我想,为什么不离开IEquatable接口而只重写Equals方法。(更少的代码=更好)我怀疑你的问题是你没有覆盖使用相等==运算符的重载。在幕后,Assert.AreEqual可能正在使用==。请参阅运算符重载教程。更新:我通过调试器运行了NUnit测试,它确实使用了Equals方法而不是==运算符。您可以使用名为Should的库编写与框架无关的断言。它还具有非常好的流畅语法,如果您喜欢流畅的界面,可以使用它。我有一篇与之相关的博客文章。http://nileshgule.blogspot.com/2010/11/use-should-assertion-library-to-write.html以上是C#学习教程:NUnit和Assert.AreEqual不兼容分享的所有内容,如果大家有一些有用的,需要了解更多的C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: