1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JUnit5 テスト方法の種類 メモ

Posted at

テスト方法種類

assertEquals(期待値結果、結果);

期待値結果と結果が同じとき、trueとなる

assertNotEquals(期待値結果, 結果)

期待値結果と結果が違うとき、trueとなる。

assertNotNull(A)

Aがnullでないとき、trueになる

assertNull(A)

Aがnullのとき、trueになる

assertTrue(A)

Aがtrueであるとき、trueが返される。そのため、Aに入るのはboolean型になる。

assertFalse(A)

Aがfalseであるとき、trueが返される。

assertIterableEquals(A, B)

List等であるAやBのすべての要素が順番通りに等しいとき、trueが返される
テスト対象クラス

public class GetUser{
	private UserDAO dao;

	public GetUserc() {
		super();
		dao = new UserDAO();
	}
public List<User> execute(){
		List<User> userList = dao.findAll();
		return userList;
	}

テストクラス

public class GetUser_Test {
	@InjectMocks
	private GetUser getUser;

	@Mock
	private UserDAO dao;

	@BeforeEach
	void setUp() throws Exception {
		MockitoAnnotations.initMocks(this);
	}
@Test
	public void executeTest01() {
		List <User>userList = new ArrayList();
		User user = new User (1, "Alice", "Hi");
		userList.add(user);
		when(dao.findAll()).thenReturn(userList);
		assertIterableEquals(userList, getUser.execute());
	}

Mockを利用することで、擬似的な環境を構築することができるようになる。Mockの対象はテスト対象クラスではなく、テスト対象クラスにimportされているクラスである。

@ParameterizedTest @ValueSource(型名s = {A,B,C})

switch文を検証する際に利用する
default文にも対応可

@ParameterizedTest
@ValueSource(ints = { 1, 2, 5 })
	void test_doPost01(int result) {
		switch (result) {
		case 1:
			assertTrue(istest_doPost01(result));
			break;

		case 2:
			assertTrue(istest_doPost01(result));
			break;
		default:
			assertTrue(istest_doPost01(result));
		}
	}

Method

privateメソッドを実行し、テスト
テスト対象クラス

public class Password {
    //引数なし、戻り値なしのメソッド
    private void print(){
        System.out.println("new pass");
    }

	}

テストクラス

Password obj = new Password();

//メソッドを取得。
Method method = Product.class.getDeclaredMethod("print");

//メソッドにアクセスできるようにする。
method.setAccessible(true);

//メソッド実行
method.invoke(obj);

setField

privateフィールドをテストする
テスト対象クラス

public  List<User> findAll() {
		List<User> userList = new ArrayList<>();

		//データベース接続
		try(Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)){
			//SELECT文の準備
			PreparedStatement pStmt = conn.prepareStatement(sql_select);

			//SELECT文を実行
			ResultSet rs = pStmt.executeQuery();

			//SELECT文の結果をArrayListに格納
			while(rs.next()) {
				int id = rs.getInt("id");
				String userName = rs.getString("name");
				String text = rs.getString("text");
				User user = new User(id, userName, text);
				userList.add(User);
			}
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}
		return userList;
	}

テストクラス

@Test
	public void findAll_test() throws Exception {
//setPrivateField(アクセスしたいオブジェクト, 変更したいフィールド名, 変更);
		ReflectionUtil.setPrivateField(dao, "sql_select", "select id,name,text, location from \"user\" order by id desc");
		assertEquals(null, dao.findAll());
	}

参考資料

https://b1san-blog.com/post/java/java-junit/
https://www.zunouissiki.com/java-reflection-privatemethod-accessible/
https://tech.excite.co.jp/entry/2021/04/18/205538

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?