有没有比较整个对象的好框架?
现在我做了
assertEquals("ha@gmail.com", obj.email);
assertEquals("5", obj.shop);
如果收到错误的电子邮件,我永远不会知道它是否有正确的商店,我想得到一个不正确的字段列表。
答案 0 :(得分:1)
使用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方法填充一个内部列表,如果相等检查失败,你可以查询该内部列表,以获得上次检查相等性时失败字段的列表。不过,不要认为这是一个好主意。
答案 1 :(得分:1)
答案 2 :(得分:1)
答案 3 :(得分:1)
我会选择hamcrest matchers。他们允许我编写这样的代码:
assertThat(obj, hasProperty("email", equalTo("ha@gmail.com")));
答案 4 :(得分:0)
如果你想测试对象的相等性,那么你肯定需要使用assertEquals()来实现equals()和测试,否则Sam是正确的,每个测试一个断言