>我已经写信给单元测试 - junit 与 Mockito 库测试任何方法,谁保存到数据库新帐户 -addNewAccount
方法。 我想问 - 如果我需要添加一个方法或什么以及如何 - 删除/删除帐户,谁被添加。请告诉我我能做什么。 我的单元测试是:
@Test
public void shouldSaveaAccountToDb() {
Account acc = new Account();
acc.setUser(this.user);
acc.setEmail(this.mail);
String account = this.accountController.addNewAccount(this.user, this.mail);
verify(this.accountRepepetytory)).save(Mockito.refEq(acc, new String[0]));
Assert.assertThat(account, CoreMatchers.is("Account"));
}
我还想添加一个具有空值的案例并测试空和空字符串。 如果您有任何添加测试用例的想法,请告诉我。
谢谢你非常匹配的帮助。我改进了我的测试。 我还有一个用空值进行测试的方法。这是方法。
@Test
public void SaveToDatabaseWithNull() {
Account acc = new Account();
String mail = null;
user.setMail((String)mail);
user.setUser(this.user);
String account = this.accountController.addNewAccount(this.user, (String)mail);
verify(this.accountRepetytory)).save(Mockito.refEq(uaccount, new String[0]));
Assert.assertThataccountCoreMatchers.is("Account"));
}
我还想问,在这些测试中是否有必要删除一些值,添加一个删除帐户的方法。 如果我用一种方法创建一个帐户,我是否必须以某种方式以及以何种方式删除它? 以在后面的方法中使用 null 值正确测试。
在你的代码中,你有一些弱点,使你测试得很脆,难以理解:
每种测试方法应仅验证一个期望。
您的测试验证了两件事:
-
该代码创建了一个类
Account
的对象,该对象等于通过equals()
的Account
类实现在测试方法中创建的对象。 -
该方法的返回值是内容
"Account"
的字符串。
问题是测试没有解释为什么你期望那个字符串。
因此,基本上您应该使用单独的方法来验证任一行为,以便在测试方法名称中更好地描述测试的行为。
减少对不相关代码的依赖关系。
Mockito.refEq()
依赖于类Account
中equals
方法的(正确)实现。没有确切的判断,这种方法实际上已经实现,或者(更糟糕的是)如果帐户获得更多不允许null
的属性,将来可能需要额外的配置。
这里更好的方法是使用ArgumentCaptor
并验证捕获对象的属性:
@Test
public void shouldPassAnAccountObjectWithNameAndEmailSetToDB() {
ArgumentCaptor<Account> accountCaptor =
ArgumentCaptor.forClass(
Account.class);
this.accountController.addNewAccount(
this.user,
this.mail);
verify(this.accountRepepetytory))
.save(
accountCaptor.capture());
Assert.assertThat(
"user",
accountCaptor.getValue().getUser(),
CoreMatchers.is(this.user));
Assert.assertThat(
"email",
accountCaptor.getValue().getEmail(),
CoreMatchers.is(this.email));
}