测试返回类型为bool的方法时。你应该:expected=true;Assert.AreEqual(expected,actual);或Assert.IsTrue(actual);我知道它们都产生相同的结果,但哪种做法更好?编辑:例如,如果我执行AreEqual,它与在返回字符串ala的方法上执行IsTrue本质上不一样吗:stringexpected=“true”;stringactual=test.testMethod(data)booltest;ifexpected.equals(actual)test=true;elsetest=false;Assert.IsTrue(test
根据标题,您使用什么字符串比较实践,为什么? 最佳答案 您没有指定平台,但我猜是.NET。我强烈建议您使用后一种形式——因为案例比较并不像您预期的那么简单。(它也避免了创建额外的字符串,但这是另一回事。)例如,当代码在土耳其运行时出现“mail”和“MAIL”时,您希望您的代码执行什么操作?如果您使用ToLower它将返回false,同样如果您使用CurrentCultureIgnoreCase-但如果您使用InvariantCultureIgnoreCase它将返回true。您需要考虑数据的来源以及您尝试使用它实现的目标。参见
当Debug.Assert的参数计算为false时,是否有任何方法可以导致VisualStudio2010在调试时中断?示例:在我的代码中有这样的行:Debug.Assert(!double.IsInfinity(x));如果我没有调试,断言失败时会弹出一个窗口。但是当我调试时,断言被记录到“输出”Pane中,这很容易被遗漏;没有弹出窗口,调试器不会停止。因此:当Debug.Assert失败时,是否有任何方法可以强制VisualStudio调试器中断?(顺便说一句:我正在开发基于WPF的桌面应用程序。在Windows窗体应用程序中,行为似乎有所不同:此处,调试器在Debug.Asser
我发现按照AAA模式中的建议对单元测试语句进行分区的概念很有用。我倾向于添加标题注释,以便测试看起来像这样://Arrangeinta=1;intb=2;//Actintc=a+b;//AssertAssert.AreEqual(3,c);但我很好奇,总是包含这些标题注释是否正常?...或者这是我应该避免的事情?inta=1;intb=2;intc=a+b;Assert.AreEqual(3,c); 最佳答案 一旦理解了基本前提,这似乎并没有增加太多值(value)。既然你提到了C#,我建议看看TheArtofUnitTesting
我有一个类型,我将其用作IDictionary中的键。类型如下publicclassEmployee{publicstringName{get;set;}publicintID{get;set;}publicoverrideboolEquals(objectobj){Employeeemp=objasEmployee;if(emp!=null)returnemp.Name.Equals(this.Name);returnfalse;}publicoverrideintGetHashCode(){returnthis.Name.GetHashCode();}}现在我已经创建了一个字典,如
读完这个问题Whydo"int"and"sbyte"GetHashCodefunctionsgeneratedifferentvalues?我想进一步挖掘并发现以下行为:sbytei=1;intj=1;object.Equals(i,j)//false(1)object.Equals(j,i)//false(2)i.Equals(j)//false(3)j.Equals(i)//true(4)i==j//true(5)j==i//true(6)i.GetHashCode()==j.GetHashCode()//false(7)(3)和(4)之间的差异打破了Equals应该对称的要求。(
我有一个我创建的实体数据模型,它从SQLite数据库中提取记录。其中一个表是People,我想重写person.Equals()方法,但我不确定去哪里进行这样的更改,因为Person对象是自动生成的,我什至看不到autogen代码在哪里居住。我知道如何在手工制作的对象上覆盖Equals,它只是在自动生成的对象上执行此操作的位置。 最佳答案 您需要创建一个分部类。向您的解决方案添加一个新的.cs文件,然后像这样启动它:publicpartialclassPerson{publicoverrideboolEquals(Objectobj
我在linqpad中运行了这段代码:longx=long.MaxValue;decimaly=x;x.Dump();y.Dump();(x==y).Dump();(y==x).Dump();Object.Equals(x,y).Dump();Object.Equals(y,x).Dump();x.Equals(y).Dump();y.Equals(x).Dump();它产生这个输出:92233720368547758079223372036854775807TrueTrueFalseFalseFalseTrue请注意最后两行:x.Equals(y)为假,但y.Equals(x)为真。因
好吧,我希望我的处理器没有烧毁,因为:[TestMethod]publicvoidtenEqualten(){Int64a=10;UInt32b=10;Assert.AreEqual(a,b);}工作得很好,但是这个:[TestMethod]publicvoidtenNotEqualten(){Int32a=10;UInt64b=10;Assert.AreEqual(a,b);}惨败。你有没有得到相同的结果,还是只有我?如果是,有什么想法,为什么?如果这是.Net4.5的已知问题,那么抱歉垃圾邮件,但我找不到它作为错误。编辑:我找到了重复的here和解释here
我有一对列表,我正在尝试使用FluentAssertions进行比较。我可以很容易地编写比较代码,但我想使用FluentAssertions,这样我就可以获得在测试失败消息中显示的原因。到目前为止,我所看到的一切似乎都在使用默认的Object.Equals比较,它区分大小写。我似乎无法将IComparer传递给Equal或Contains方法,还有其他方法吗?[TestMethod()]publicvoidfoo(){varactual=newList{"ONE","TWO","THREE","FOUR"};varexpected=newList{"One","Two","Three"