Tôi có một phương thức riêng trong lớp thử nghiệm của mình để xây dựng một Barđối tượng thường được sử dụng . Hàm Bartạo gọi someMethod()phương thức trong đối tượng giả định của tôi:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
Trong một số phương pháp thử nghiệm của tôi, tôi muốn kiểm tra someMethodcũng được gọi bằng thử nghiệm cụ thể đó. Một cái gì đó như sau:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Điều này thất bại, bởi vì đối tượng bị chế giễu đã someMethodgọi hai lần. Tôi không muốn các phương thức kiểm tra của mình quan tâm đến các tác dụng phụ của getBar()phương pháp của mình , vậy liệu có hợp lý khi đặt lại đối tượng giả của tôi vào cuối getBar()không?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Tôi hỏi, bởi vì tài liệu cho thấy việc đặt lại các đối tượng giả thường là dấu hiệu của các xét nghiệm xấu. Tuy nhiên, điều này cảm thấy ổn với tôi.
Thay thế
Sự lựa chọn thay thế dường như đang gọi:
verify(mockedObject, times(2)).someMethod();
mà theo tôi buộc mỗi bài kiểm tra phải biết về những kỳ vọng getBar(), không có lợi.