我正在學習JUnit。在處理特定問題時,我決定使用JUnitParams參數提供程序。對於測試方法我寫應該包含兩個輸入值與列表中的每個組參數對其中一個方法調用的結果將測試:如何在JUnitParams參數提供程序中使用Mockito存根控件?
private static final Object[] getConstraints() {
return new Object[]{
new Object[]{15, Equipment.WHITEBOARD, Arrays.asList(new Classroom[]{classroomA, classroomB})},
new Object[]{15, Equipment.PROJECTOR, Arrays.asList(new Classroom[]{classroomB})},
new Object[]{15, Equipment.MICROPHONE, Arrays.asList(new Classroom[]{classroomA})},
new Object[]{30, Equipment.WHITEBOARD, Arrays.asList(new Classroom[]{classroomB})},
new Object[]{30, Equipment.PROJECTOR, Arrays.asList(new Classroom[]{classroomB})},
new Object[]{30, Equipment.MICROPHONE, Arrays.asList(new Classroom[]{})},
new Object[]{45, Equipment.WHITEBOARD, Arrays.asList(new Classroom[]{})},
new Object[]{45, Equipment.PROJECTOR, Arrays.asList(new Classroom[]{})},
new Object[]{45, Equipment.MICROPHONE, Arrays.asList(new Classroom[]{})},
};
}
classroomA
和classroomB
實際上每個測試執行之前準備存根的Mockito :
@Test
@Parameters(method = "getConstraints")
public void shouldBookClassroomMeetingConstraints(int capacity, Equipment equipment, List<Classroom>
suitableClassrooms) {
Assert.assertTrue("Should book a classroom that has a minimum capacity of " + capacity + " and has " +
equipment,
suitableClassrooms.contains(bookingSystem.book(capacity, equipment, ANY_DAY_OF_WEEK, ANY_HOUR)));
}
:
@Before
public void setUp() {
classroomA = mock(Classroom.class);
classroomB = mock(Classroom.class);
classrooms = Arrays.asList(new Classroom[]{classroomA, classroomB});
when(classroomA.getName()).thenReturn("A");
when(classroomA.getCapacity()).thenReturn(20);
when(classroomA.getEquipment()).thenReturn(Arrays.asList(new Equipment[]{Equipment.WHITEBOARD, Equipment.MICROPHONE}));
when(classroomB.getName()).thenReturn("B");
when(classroomB.getCapacity()).thenReturn(40);
when(classroomB.getEquipment()).thenReturn(Arrays.asList(new Equipment[]{Equipment.WHITEBOARD, Equipment.PROJECTOR}));
bookingSystem = new BookingSystem(classrooms);
}
,當我嘗試使用Classroom
對象的上述列表中出現的問題10
調試顯示,在第一次運行中,suitableClassrooms
包含2個對象,但進一步檢查顯示所有元素均爲空 - 我準備的存根不存在。顯然,測試不會通過或失敗,他們應該通過或失敗。
與Mockito一起使用JUnitParams有沒有限制,還是我使用它們是錯誤的?什麼是正確的方式來使用它們?
這也可能是單元測試的錯誤技術。如果是這種情況,編寫一個測試的正確方法是什麼,以驗證方法調用的結果是否在給定的數組中?
你的問題是什麼?例外? – Evgeny
我的問題是'suitableClassrooms.contains(...)'方法總是返回false,因爲'suitableClassrooms'只有null元素。由於某些原因,模擬存根不在列表中。 –