我必须如何用Mockito测试此方法?

时间:2019-04-29 15:28:10

标签: java testing mocking mockito

服务类中的方法:

    {
        bills: [
             { 
                  id: "1",
                  total: 20.0
              },
              { 
                  id: "1",
                  total: 20.0
              },
              { 
                  id: "2",
                  total: 10.0
              }
         ]
    }

我不明白我必须对CollectionUtils.filter做些什么。也嘲笑这个吗? 现在我在测试班上有这个

make.NegLogLik <- function(data, fixed=c(FALSE,FALSE)) { 
    params <- fixed
    function(p) { 
    params[!fixed] <- p
        mu <- params[1]
        sigma <- params[2]
        a <- -0.5*length(data)*log(2*pi*sigma^2) 
        b <- -0.5*sum((data-mu)^2) / (sigma^2) 
        -(a+b)
    }
}

set.seed(1); 
normals <- rnorm(100, 1, 2)
nLL <- make.NegLogLik(normals)
nLL


optim(c(mu = 0, sigma = 1), nLL)$par


nLL <- make.NegLogLik(normals, c(FALSE, 2))  
optimize(nLL, c(-1, 3))$minimum`

2 个答案:

答案 0 :(得分:3)

CollectionUtils.filter是一种实用程序方法,可基于谓词过滤集合。您无需嘲笑。

您需要做的是模拟accountDao以返回Collection<Account>。集合中的帐户实例可以是真实对象或模拟对象。如果是简单的POJO,则建议创建一个真实的Account对象列表。

然后,您从列表中验证返回的Collection<Account>,因为它可以根据谓词正确过滤掉Account对象。

以此,您正在测试代码/逻辑的症结所在。

它可能看起来像这样(免责声明:未编译)

@Test
public void searchAccountsByPartOfName() throws ParseException {
    Collection<Account> accounts = new ArrayList<>();
    Account acc1 = new new Account(..); //name having the substring "test"
    Account acc2 = new new Account(..); //surname equals "test"
    Account acc3 = new new Account(..);  //neither name nor surname has the substring "test"
    accounts.add(acc1); 
    accounts.add(acc2); 
    accounts.add(acc3);

    when(accountDao.getAll()).thenReturn(accounts);

    service.searchAccounts("test");

    Collection<Account> actual = service.searchAccounts("test");

    //here assert that the actual is of size 2 and it has the ones that pass the predicate
    assertEquals(2, actual.size());
    assertEquals(acc1, actual.get(0));
    assertEquals(acc2, actual.get(1));
}

您可能还想编写类似的测试来测试不区分大小写的检查。

答案 1 :(得分:2)

CollectionUtils.filter()调用包含searchAccounts()方法执行的逻辑,而Collection<Account> accounts = accountDao.getAll();searchAccounts()的一部分,您希望将其隔离为由另一个依赖项执行。
因此,模拟accountDao()返回特定的帐户列表,并断言searchAccounts()返回预期的已过滤帐户。