TIPS |
Mockitoを使う |
//[@InjectMocks]で[@Autowired]しているものをすべて定義する
@Mock
private Service service;
//テスト対象への注入する
@InjectMocks
private Controller controller;
//戻り値ありの場合
Mockito.when(モックインスタンス).メソッド(任意の引数).thenReturn(任意の戻り値);
//戻り値のないメソッドの場合
Mockito.doNothing().when(モックインスタンス).メソッド(任意の引数);
|
ObjectMapperでJSONからList<Map>を作る |
List<Map<String, Object>> map = objectMapper.readValue(jsonString, new TypeReference<ArrayList<HashMap<String, Object>>>() {});
|
MvcMockでアクセス |
@AutoConfigureMockMvc
// Get
MvcResult result = mockMvc.perform(MockMvcRequestBuilders
.get("/user")
.accept(MediaType.APPLICATION_JSON)
.param("key", value)
).andReturn();
// Post
MvcResult result = mockMvc.perform(MockMvcRequestBuilders
.post("/user/entry")
.content(objectMapper.writeValueAsString(requestData))
.contentType(MediaType.APPLICATION_JSON_VALUE)
).andReturn();
// FileUpload
MultiValueMap params = new LinkedMultiValueMap();
params.add("key", "value");
Path path = ...
byte[] data = Files.readAllBytes(path); // java.nio.file.Files
// new MockMultipartFile(キー名,オリジナルファイル名,content-type,データ)
MockMultipartFile firstFile = new MockMultipartFile("uploadFile", "filename.txt", "text/plain", data);
MvcResult result = mockMvc.perform(MockMvcRequestBuilders
.multipart("/user/upload")
.file(firstFile)
.params(params)
).andReturn();
// performで[.andExpect(status().isOk())]すればいいけど
assertEquals(HttpStatus.OK, result.getResponse().getStatus());
|
[Mock]返却値を変える |
// n回呼ばれる場合で、それぞれ戻り値を変える場合
when(モック化したオブジェクト.メソッド).thenReturn("1回目の値", "2回目の値", "3回目の値"); //4回目以降は3回目の値となる
// メソッドチェインで記載してもOK
when(モック化したオブジェクト.メソッド)
.thenReturn("1回目の値")
.thenReturn("2回目の値")
.thenReturn("3回目の値");
|
DBUnitを利用してデータを投入する |
// データベース設定に注意(消えるよ)
// src/test/resources/application.properties or ymlのデータベース設定に投入(なければsrc/main/resourcesの設定)
// ファイル名だけなら同じパッケージ(resources側)に置く
// シート名=テーブル名
// シートを準備してシートの中身をなし(何も書かない)とテーブルデータが消えるだけ
@Test
@DatabaseSetup("test01_input.xlsx")
|
DBUnitを利用して結果を検証する |
//NON_STRICTを指定して記載されているテーブルのみが検査するようにする
//NON_STRICT_UNORDEREDを指定すると行の順番を無視する
// ファイル名だけなら同じパッケージ(resources側)に置く
@Test
@ExpectedDatabase(value="test01_after.xlsx",assertionMode=DatabaseAssertionMode.NON_STRICT_UNORDERED)
|
jsonに変換 |
Map map = newHashMap();
map.put("key1", value);
String json = objectMapping.writeValueAsString(map);
|
DBUnitでExcelファイルをロードする |
//テストクラスに以下のアノテーションを付与
//@DbUnitConfiguration(dataSetLoader = XlsDataSetLoader.class)
//以下のクラスを作成
public class XlsDataSetLoader extends AbstractDataSetLoader {
@Override
protected IDataSet createDataSet(Resource resource) throws Exception {
try(InputStream inputStream = resource.getInputStream()) {
//return new XlsDataSet(inputStream);
XlsDataSet xlsDataSet = new XlsDataSet(inputStream);
ReplacementDataset replacementDataSet = new ReplacementDataset(xlsDataSet);
replacementDataSet.addReplacementObject("%NULL%", null);
return replacementDataSet;
}
}
}
|
[DBUnit]DataSet |
// CompsiteDataSet beforeDataSet + insertedDataSet
CompositeDataSet joinDataSet = new CompositeDataSet(beforeDataSet,insertedDataSet);
// ReplacementDataSet
ReplacementDataSet replaceDataSet = new ReplacementDataSet(dataset);
replaceDataSet.addReplacementObject("xxxx", value); //xxxxをvalueに置き換え
// QueryDataSet
QueryDataSet queryDataSet = new QueryDataSet(new DatabaseConnection(conn));
//
String[] tables = new String[]{"table_a", "table_b", "table_c"};
IDataSet choiceDataSet = new DatabaseConnection(conn).createDataSet(tables);
|
いろいろ |
// Resourcesフォルダのファイル内容を文字列にロードする
// Apache Common のIOUtilsを使用
String json = IOUtils.toString(getClass().getResourceAsStream("ファイル"), Charset.defaultCharset());
|