模範解答的なセクション 2
概要
DBFluteハンズオン、セクション 2 の模範解答的な実装です。
正解は一つではありませんので、あくまで "的な" というところで、参考までに。
このセクションでの登場人物
e.g. このセクションでの登場人物 @Directory
dbflute-hands-on
|-src/test/java
| |-org.docksidestage.handson
| | |-exercise
| | | |-HandsOn02Test.java
| | |
| | |-unit
|-src/main/java
|-...
|-dbflute_maihamadb
| |-dfprop
| |-...
| |-playsql
| | |-data
| | | |-common
| | | | |-xls
| | | | |-10-master.xls
| | | |-ut
| | | | |-xls
| | | | |-20-member.xls
| | | | |-30-product.xls
| | | | |-defaultValueMap.dataprop
|-...
|-mydbflute
...
模範解答的な実装
e.g. 模範解答的な実装やってみた @Java
/**
* @author jflute
*/
public class HandsOn02Test extends UnitContainerTestCase {
@Resource
private MemberBhv memberBhv;
/**
* テストデータが存在すること
*/
public void test_existsTestData() throws Exception {
// ## Arrange ##
// ## Act ##
int count = memberBhv.selectCount(cb -> {});
// ## Assert ##
assertTrue(count > 0);
}
/**
* 会員名称がSで始まる会員を検索 (これはタイトル、この中にも要件が含まれている)
* o 会員名称の昇順で並べる (これは実装要件、Arrange でこの通りに実装すること)
* o (検索結果の)会員名称がSで始まっていることをアサート (これはアサート要件、Assert でこの通りに実装すること)
* o 該当テストデータがない、条件間違い、などで検索結果0件による素通りgreenにならないように (今後ずっと同じ)
*/
public void test_1() throws Exception {
// ## Arrange ##
String prefix = "S";
// ## Act ##
ListResultBean<Member> memberList = memberBhv.selectList(cb -> {
cb.query().setMemberName_LikeSearch(prefix, op -> op.likePrefix());
cb.query().addOrderBy_MemberName_Asc();
});
// ## Assert ##
assertHasAnyElement(memberList);
memberList.forEach(member -> {
String memberName = member.getMemberName();
log("memberName: {}", memberName); // yon can use Slf4j-like placeholder
assertTrue(memberName.startsWith(prefix));
});
}
/**
* 会員IDが1の会員を検索
* o 一件検索として検索すること
* o 会員IDが 1 であることをアサート
*/
public void test_2() throws Exception {
// ## Arrange ##
// ## Act ##
memberBhv.selectEntity(cb -> cb.acceptPK(1)).alwaysPresent(member -> {
// ## Assert ##
Integer memberId = member.getMemberId();
log("memberId: {}", memberId);
assertEquals(1, memberId);
});
}
/**
* 生年月日がない会員を検索
* - 更新日時の降順で並べる
* - 生年月日がないことをアサート
*/
public void test_3() throws Exception {
// ## Arrange ##
// ## Act ##
ListResultBean<Member> memberList = memberBhv.selectList(cb -> {
cb.query().setBirthdate_IsNull();
cb.query().addOrderBy_UpdateDatetime_Desc();
});
// ## Assert ##
assertHasAnyElement(memberList);
memberList.forEach(member -> {
LocalDate birthdate = member.getBirthdate();
log(member.getMemberName(), birthdate); // comma-separated if no template string
assertNull(birthdate);
});
}
}