LoginSignup
5
4

More than 5 years have passed since last update.

Thymeleafの出力結果を単体テストする

Posted at

0.テストしようとしたきっかけ

ThymeleafとSpring MVCは便利でHTMLのパスを渡すだけで便利に処理をしてくれる。
ただThymeleafに本当に想定していた値が入っているかテストしたいと思いその方法を記載した。

1.Thymeleafのth:textの内容をテスト

1-1.まずはHTMLを用意する

th:textに正しい値がセットされるかテスト

sample1.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>テスト</title>
</head>
<body>
    <div th:text="${th_text}"></div>
</body>
</html>

1-2.テストクラスを用意

ThymeLeafにth:textをセットしてその値が正しくHTMLにセットされるかテスト

ThymeLeafTest.java
@Test
public void ThymeLeafのTextのテスト() {
// TemplateResolverに設定値をセット
TemplateResolver resolver = new ClassLoaderTemplateResolver();
 resolver.setTemplateMode("HTML5");
 resolver.setPrefix("templates/");
 resolver.setSuffix(".html");
// TemplateEngineにTemplateResolverの値をセット
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);

// ThymeLeafで使用するテキスト生成
Context ctx = new Context();
String hello = "テキストのテスト";
ctx.setVariable("th_text", hello);

// ThymeLaefの結果出力(templates配下のsample1.htmlを読み込む)
String result = templateEngine.process("sample1", ctx);
System.out.println(result);
// ThymeLaefの結果出力にセットした文字列があるか
assertThat(result, is(containsString(hello)));
}

2.Thymeleafのth:eachの内容をテスト

2-1.まずはHTMLを用意する

th:eachに正しい値がセットされるかテスト

sample2.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>テスト</title>
</head>
<body>
    <table border="1">
        <tr th:each="element, elementStat : ${th_each}">
            <td th:text="${element}"></td>
        </tr>
    </table>
</body>
</html>

2-2.テストクラスを用意

ThymeLeafにth:eachをセットしてその値が正しくHTMLにセットされるかテスト

ThymeLeafTest.java
@Test
publicvoidThymeLeafのEachのテスト(){
//TemplateResolverに設定値をセット
TemplateResolverresolver=newClassLoaderTemplateResolver();
resolver.setTemplateMode("HTML5");
resolver.setPrefix("templates/");
resolver.setSuffix(".html");
//TemplateEngineにTemplateResolverの値をセット
TemplateEnginetemplateEngine=newTemplateEngine();
templateEngine.setTemplateResolver(resolver);

//ThymeLeafで使用するリスト生成
Contextctx=newContext();
List<String>list=Arrays.asList("aaa","bbb","ccc");
ctx.setVariable("th_each",list);

//ThymeLaefの結果出力(templates配下のsample1.htmlを読み込む)
Stringresult=templateEngine.process("sample2",ctx);
System.out.println(result);
//ThymeLaefの結果出力にセットした文字列があるか
assertThat(result,is(containsString("aaa")));
assertThat(result,is(containsString("ccc")));
}

※今回のテストクラスを作って

本来のThymeLaefは、TemplateEngineクラスのprocessメソッドを介してHTMLに結果を介している。

5
4
1

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
5
4