weblog

技術的なメモ置き場。

【Spring Boot】ユニットテストでセッションスコープのモックデータを用意する

Spring Bootのユニットテストでセッションスコープのテストをしたいときに MockHttpSession を使用することでモックデータを作成ができる。

MockHttpSession session = new MockHttpSession();
session.setAttribute("key", "value");
MockHttpServletRequest request = new MockHttpServletRequest();
request.setSession(session);

【MapStruct】BeforeMappingとAfterMapping

BeforeMappingとAfterMappingでマッピング前後の処理を追加できる。

環境

  • MapStruct : 1.2.0.Final
  • Java : 9
  • JUnit : 4.12
  • AssertJ : 3.9.1

Mapperの作成

@Mapper
public abstract class PersonMapper {

    @BeforeMapping
    protected void before(PersonEntity entity) {
        entity.setName("BEFORE_" + entity.getName());
    }

    @AfterMapping
    protected void after(@MappingTarget Person person) {
        person.setName(person.getName() + "_AFTER");
    }

    public abstract Person toPerson(PersonEntity entity);
}

生成されたMapper

/*
@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2018-04-02T22:00:38+0900",
    comments = "version: 1.2.0.Final, compiler: javac, environment: Java 9.0.1 (Oracle Corporation)"
)
*/
public class PersonMapperImpl extends PersonMapper {

    @Override
    public Person toPerson(PersonEntity entity) {
        before( entity );

        if ( entity == null ) {
            return null;
        }

        Person person = new Person();

        person.setName( entity.getName() );
        person.setAge( entity.getAge() );

        after( person );

        return person;
    }
}

テストコード

@Test
public void test() {
    PersonEntity entity = new PersonEntity();
    entity.setName("curry");

    PersonMapper mapper = Mappers.getMapper(PersonMapper.class);
    Person person = mapper.toPerson(entity);

    assertThat(person.getName()).isEqualTo("BEFORE_curry_AFTER");
}