- Mockito 를 이용한 테스트
- 日常茶飯事
- 2010. 6. 5. 15:50
https://javacan.tistory.com/entry/MocktestUsingMockito
https://bestalign.github.io/2016/07/08/intro-mockito-1/
- 단위 테스트에서 외부 자원을 대체하기 에서 사용한 코드를 Mockito를 이용해서 만들어 본다.
- Mockito를 적용
public class DatabaseExampleTest { @Test public void testReadAbc() throws SQLException { MockResultSet rs = new MockResultSet(); rs.addRow(new Object[]{101, "John"}); //MockStatement st = new MockStatement(); //st.setResultSet(rs); Statement st = mock(Statement.class); stub(st.executeQuery("SELECT empno, empid FROM TestTable")).toReturn(rs); //MockConnection con = new MockConnection(); //con.setStatement(st); Connection con = mock(Connection.class); stub(con.createStatement()).toReturn(st); DatabaseExample example = new DatabaseExample(); assertEquals("1:101,John\n", example.readAbc(con, "TestTable")); } }
- 11번째 라인은 다음과 같이 간단하게 변경할 수 있다.
stub(st.executeQuery("SELECT ... FROM TestTable")).toReturn(rs); stub(st.executeQuery(anyString())).toReturn(rs); stub(st.executeQuery(startsWith("SELECT"))).toReturn(rs);org.mockito.Matchers에 any*() 등 다양한 메서드가 있다.
- 어노테이션을 사용할 수 있다.
@RunWith(MockitoJUnitRunner.class) public class DatabaseExampleTest { @Mock private Connection con; @Mock private Statement st; private MockResultSet rs; DatabaseExample example; @Before public void setUp() throws Exception { rs = new MockResultSet(); st = mock(Statement.class); stub(st.executeQuery(anyString())).toReturn(rs); con = mock(Connection.class); stub(con.createStatement()).toReturn(st); example = new DatabaseExample(); } @Test public void testReadAbc() throws SQLException{ rs.addRow(new Object[]{101, "John"}); assertEquals("1:101,John\n", example.readAbc(con, "TestTable")); } @Test public void testReadAbcWithMultiRow() throws SQLException{ rs.addRow(new Object[]{101, "John"}); rs.addRow(new Object[]{102, "Jane"}); assertEquals("1:101,John\n2:102,Jane\n", example.readAbc(con, "TestTable")); } }
- 비지니스 로직이 있는 MockResultSet 은 대체하지 않는 것이 좋다.
Recent comment