2014-10-05 74 views
0

我是Mockito新手,继this后,我正试图找出verify method does。它似乎用于确保所选方法被调用一次。我有以下代码,通过查看代码,我可以找出两次调用addBook方法,为什么我应该使用验证?我的意思是在任何情况下都很容易确保一个方法被调用oncem为什么我们应该使用验证方法?我们什么时候需要使用Mockito的验证方法?

String isbn = mockedBookDAL.addBook(book1); 
     assertNotNull(isbn); 
     isbn = mockedBookDAL.addBook(book1); 
     assertNotNull(isbn); 
     verify(mockedBookDAL).addBook(book1); 
     assertEquals(book1.getIsbn(), isbn); 
+0

你为什么嘲笑CUT? “mockedBookDAL.addBook”实际上测试了什么?你知道它被称为**,因为你称它为**。 – 2014-10-05 10:27:30

+0

CUT是什么意思?我只是想确保我可以添加一本书。 – Jack 2014-10-05 10:30:43

+0

被测试的类。你从不嘲笑CUT,你嘲笑它的_dependencies_。然后,存根这些依赖关系,并验证CUT调用依赖关系上的预期方法。据我所知,你测试的不是很多。 – 2014-10-05 10:32:58

回答

2

想象一个类来管理帐户:

public class Account { 
    private Logger logger; 
    public Account(Logger logger) { 
    this.logger = logger; 
    } 
    ... 

    public void withdraw(int amount) { 
    ... 
    logger.logWithdrawal(amount); 
    ... 
    } 
} 

这样进行测试,该撤确实记录,你嘲笑的记录和验证的交互:

public class AccountTest { 
    @Test 
    public void withdrawalShouldBeLogged() { 
    Logger logger = mock(Logger.class); 
    Account cut = new Account(logger); 

    int amount = 10; 
    cut.withdraw(amount); 

    verify(logger).logWithdrawal(amount); 
    } 
} 

这断言的形式也被称为间谍。

进一步的通知:您应该通常每个测试方法只声明一件事。验证间谍交互将是该断言,所以你通常不应该使用验证和断言在相同的方法。

+0

谢谢,我有两个问题,首先BoristheSpider在上面的评论中提到我不应该嘲笑CUT方法。其次,在这段代码中,您将确保位于提取方法中的logwithdrawal方法按值10调用,对吗? – Jack 2014-10-05 11:12:46

+0

没错。剪切使用模拟。这个测试验证记录器是否在撤回发生时被调用。 – 2014-10-05 11:16:32

+0

如果这是对的,你怎么嘲笑记录器类? – Jack 2014-10-05 11:20:13

相关问题