EasyMock不使用模拟方法

我创建了以下测试。

@Test
public void whenCreate_ThenaccountsShouldBeFound() {
    account account = new account();
    account.setusername("Test");
    account.setfirstName("FirstName");
    account.setLastName("LastName");
    account.setPassword("Password");
    account.setEmail("maxmuster@hs-pforzheim.de");
    accountService.createaccount(account);

    account a = new account();
    a.setusername("Teswt");
    a.setfirstName("FirstName");
    a.setLastName("LastName");
    a.setPassword("Password");
    a.setEmail("maxmustee@hs-pforzheim.de");
    accountService.createaccount(a);
    accountRepository accountRepository = createniceMock(accountRepository.class);
    expect(accountRepository.findAll()).andReturn(Collections.singletonList(a));
    replay(accountRepository);

    assertEquals("username name should be Test","Test",accountService.getallaccounts().iterator().next().getusername());
}

测试通过了,但我不知道为什么。通常,模拟方法应返回另一个对象,这将导致错误的测试结果。对我来说,模拟方法似乎不起作用,但是为什么呢?

xxnj916 回答:EasyMock不使用模拟方法

实际上,模拟是正确的。只是您的代码是错误的。

您为AccountRepository创建了一个模拟,但没有将此模拟设置为accountService。因此,当您调用accountService.getAllAccounts()时,该accountService将调用真实的AccountRepository,而不是模拟的。因此,您将在DB中获得2个书面元素。

而且,将“测试”与返回列表的第一个元素进行比较时,断言是正确的。

要修复,只需将AccountRepository设置为accountService

AccountRepository accountRepository = createNiceMock(AccountRepository.class);
accountService.setAccountRespository(accountRepository);

仅此而已 谢谢,琳

本文链接:https://www.f2er.com/3044451.html

大家都在问