3 回答

TA貢獻1757條經驗 獲得超7個贊
您可以在每次測試之前創建它。像
private DocumentConfig documentConfig;
@Before
public void createConfig() {
documentConfig = new DocumentConfig(mockedParams);
}

TA貢獻1805條經驗 獲得超9個贊
一種常用的方法是設置一個虛擬用戶并將其注入到方法中(用 注釋),以便在每個測試中重置整個上下文,例如:DocumentConfigsetUp()@Before
@Before
public void setUp() {
this.documentConfig = new DocumentConfig();
this.documentConfig.setNameRequired(false);
this.service = new DocumentService(this.documentConfig);
}
在本例中,我設置了一個帶有 be 的簡單對象。我可能會刪除該語句,因為無論如何都會默認為。nameRequiredfalsebooleanfalse
如果不使用構造函數注入,并且沒有 的 setter,則必須使用反射來注入字段,例如:documentConfig
ReflectionTestUtils.setField(this.service, "documentConfig", this.documentConfig);
在你的測試中,你現在可以寫這樣的東西:
@Test
public void save_failure() {
this.documentConfig.setNameRequired(true);
// TODO: Implement test
}
或者,您可以模擬 ,這樣您就不依賴于其實現來測試 。我假設您正在調用 代碼中的某個位置,因此您可以像這樣模擬它:DocumentConfigDocumentServiceisNameRequired()DocumentService
@Before
public void setUp() {
// Use a static import for Mockito.mock()
this.documentConfig = mock(DocumentConfig.class);
this.service = new DocumentService(this.documentConfig);
}
@Test
public void save_failure() {
// Use a static import for Mockito.when()
when(this.documentConfig.isNameRequired()).thenReturn(true);
// TODO: Implement test
}
由于這種模擬/注射設置經常發生,Mockito也有自己的運行器,可以讓你擺脫這種方法,例如:setUp()
@RunWith(MockitoJUnitRunner.class)
public class DocumentServiceTest {
@InjectMocks
private DocumentService documentService;
@Mock
private DocumentConfig documentConfig;
@Test
public void save_failure() {
when(this.documentConfig.isNameRequired()).thenReturn(true);
// TODO: Implement test
}
}

TA貢獻1799條經驗 獲得超6個贊
目前尚不清楚您使用的測試框架。對于普通單元測試,使值可通過 setter 或構造函數注入來注入。任何最適合您的特定情況的東西。
如果要注入大量(超過三個 ;-) 此類值,則可以考慮引入一個配置類,將所有這些值作為單個參數注入。
添加回答
舉報