2017-10-02 14 views
0

私はテストケースの1番目のコードブロックを2番目のコードブロックに示すようなものに単純化しようとしています。 私は2つの質問があります:カスタムオブジェクトのMockitoリストを作成してアサートする方法は?

  1. 私はカスタムオブジェクトのリストを模擬することができますか?
  2. 返されたオブジェクトのリストのフィールドを使用してカスタムオブジェクトの模擬リストをアサートできますか?

同様の成果はありますか?

このような何かに
@Test 
    public void testStudentSuccess() { 
    Student st = new Student(); 
     st.setRollNumber("1234"); 
     st.setFeeAmount("1000"); 
     List<Student> stList = new ArrayList<Student>(); 
     stList.add(st); 
     Map<String, Object> simpleJdbcCallResult = new HashMap<String, Object>(); 
     simpleJdbcCallResult.put("X_GET_DATA", stList); 
     when(simpleJdbcCall.getSimpleJdbcCall(any(String.class), any(String.class), any(String.class), 
         any(String.class), any(String.class), any(String.class), any(String.class), any(String.class), 
         any(StudentRowMapper.class))).thenReturn(simpleJdbcCallResult); 
     List<Student> studentList = opusPackageRepo.getPolicyStudent("123", "123"); 
     Student student = studentList.get(0); 
     assertEquals(student.getRollNumber(), "1234"); 
     assertEquals(student.getFeeAmount(), "1000"); 
    } 

(コメントを参照してください - > //):

@Test 
    public void testStudentSuccess() { 
     List<Student> stList = Mockito.mock(new ArrayList<Student>()); // 1. IS SOMTHING SIMILAR TO THIS POSSIBLE? 
     Map<String, Object> simpleJdbcCallResult = new HashMap<String, Object>(); 
     simpleJdbcCallResult.put("X_GET_DATA", Mockito.mock(new ArrayList<Student>())); 
     when(simpleJdbcCall.getSimpleJdbcCall(any(String.class), any(String.class), any(String.class), 
         any(String.class), any(String.class), any(String.class), any(String.class), any(String.class), 
         any(StudentRowMapper.class))).thenReturn(simpleJdbcCallResult); 
     List<Student> studentList = opusPackageRepo.getPolicyStudent("123", "123"); 
     assertEquals(studentList, stList); // 2. CAN I ASSERT EQUALS A MOCK WITH A RETURNED LIST? 
    } 
+0

ここで嘲笑いに値するのは、opusPackageRepoだけです。ここでリストを嘲笑するのはどういう意味ですか –

+0

@glitchの答えは、私が探していたものです - "あなたのテストはこのリストの内容について知る必要はありません" – nanospeck

答えて

1

をあなたのOPで元のテストでは、次のようにあなたがsimpleJdbcCall.getSimpleJdbcCall()のために期待される結果を作成している:

Student st = new Student(); 
st.setRollNumber("1234"); 
st.setFeeAmount("1000"); 
List<Student> stList = new ArrayList<Student>(); 
stList.add(st); 
Map<String, Object> simpleJdbcCallResult = new HashMap<String, Object>(); 
simpleJdbcCallResult.put("X_GET_DATA", stList); 

次に、結果(は"X_GET_DATA"キーでアクセスする必要があります)が期待通りに一致していると主張します:

Student student = studentList.get(0); 
assertEquals(student.getRollNumber(), "1234"); 
assertEquals(student.getFeeAmount(), "1000"); 

あなたはモック考える必要なく、これをsimplfy可能性が...

List<Student> expected = new ArrayList<Student>(); 
Map<String, Object> simpleJdbcCallResult = new HashMap<String, Object>(); 
simpleJdbcCallResult.put("X_GET_DATA", expected); 

... 

List<Student> actual = opusPackageRepo.getPolicyStudent("123", "123"); 
assertSame(expected, actual); 

これはgetPolicyStudentによって返された結果がsimpleJdbcCall.getSimpleJdbcCall()呼び出しによって返されたリストと同じであることを確認します。 "X_GET_DATA":あなたのテストはsimpleJdbcCall.getSimpleJdbcCall()によって返されたリストが正しく、このキーからそれを読んgetPolicyStudentによって渡されることを確認するとちょうど懸念しているので、

あなたのテストでは、このリストの内容を知っている必要はありません。私はだと思います。これは、「テストケースを簡素化する」と書いたときに思いついたことであり、簡単に実行できますが、嘲笑は必要ありません。

関連する問題