SUT(System Under Test) 是指測試目標,就是要被測試的對象。
DOC(Depended-on Component),指的是SUT所依賴的程式或物件。
例如要測試的類別為UserService
,則UserService
就是SUT;而UserService
的方法中可能會用到(依賴)UserDao
,則UserDao
就是DOC。
在測試時,SUT會是用真物件,而DOC通常會用假物件,假物件又稱為替身物件(Test Double)。
替身物件Test Double只是假物件的一個通稱,依不同的模擬程度分為:
- Dummy: 只用作參數傳遞,不實際使用,所以不存在任何方法。通常是用來填入方法的參數列。
- Stub: 寫死的物件,方法的回傳值是寫死的,不會依測試時的情況做改變。
- Spy: 會紀錄自身的狀態,例如被呼叫的資訊,像是如何被呼叫,被呼叫的次數等。
- Fake: 真實物件的簡化版,測試時與被測試物件互動。
- Mock: 驗證方法預期被調用的情況,如方法的調用次數及返回值。
Spy和Mock的區別是,Spy是真實物件並取代物件中的某些方法而已;而Mock是建立一個完全替代真實物件的假物件。
以JUnit + Mockito的角度來看,一支用來測試UserService
的測試類別UserServiceTest
可能如下:
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@InjectMocks
private UserService userService; // SUT
@Mock
private UserDao userDao; // DOC, Mock object(Test Double)
@Test
public testSomeMethod() {
// ...
}
}
菜鳥工程師-肉豬
若是Spring Boot + JUnit + Mockito的話可能是:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MySpringBootApplication.class })
public class UserServiceTest {
@Autowired
private UserService userService; // SUT
@MockBean
private UserDao userDao; // DOC, Mock object(Test Double)
@Test
public testSomeMethod() {
// ...
}
}
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
參考:
沒有留言:
張貼留言