有没有什么好的框架来比较整个对象?
现在我做到了
assertEquals("ha@gmail.com", obj.email);
assertEquals("5", obj.shop);
如果返回错误的电子邮件,我永远不知道它是否有正确的商店,我想获得不正确字段的列表。
最佳答案
按照 1 个测试、1 个断言的思路,如果您在自己的测试中包含每个断言,您就会知道其中一个或两个断言是否因存在 1 或 2 个失败测试而失败。
@Test
public void TestEmail()
{
obj = GetTestObject();
assertEquals("ha@gmail.com", obj.email);
}
@Test
public void TestShop()
{
obj = GetTestObject();
assertEquals("5", obj.shop);
}
显然,您需要将对象的设置移动到方法中,而不是在测试设置方法中执行它,并将其设置为类变量。
如果您确实想测试是否在单个测试中设置了所有属性:
@Test
public void TestAllProperties()
{
obj = GetTestObject();
bool testResult=true;
string failureString;
if "ha@gmail.com".equals( obj.email) == false
{
testResult=false;
failureString+="email was different";
}
if "5".equals( obj.shop) == false
{
testResult=false;
failureString+="shop was different";
}
assertTrue(testResult,failurestring);
}
但我不确定这到底能给你带来什么。
但是如果你真的想比较整个对象的相等性,那么重写 equals 方法(不要忘记 getHashCode)并在那里进行相等性检查。毕竟这就是它的用途......
如果您想要一个不正确字段的列表,您可以使用 equals 方法填充一个内部列表,如果相等性检查失败,您可以查询该列表,以获取上次检查相等性时失败的字段列表。不过,我真的不认为这是一个好主意。
关于java - 用于 bean 比较的单元测试框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881938/