
質問
lombokの@Dataアノテーションを付与したModelを参照するControllerに対してテストを実行すると、lombokによって生成されているgetter/setterが見つからないというエラーが発生してしまいます。
Java初心者なので、そもそもJUnitの実行方法が異なるなどあるかもしれませんが、ご知見をいただきたく、よろしくおねがいします。
環境
Javaのバージョン
$ java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
IDEの種類とバージョン
IntelliJ IDEA 2019.1 (Community Edition) Build #IC-191.6183.87, built on March 27, 2019 JRE: 1.8.0_202-release-1483-b39 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o macOS 10.12.6
ビルドツールの種類
$ gradle --version ------------------------------------------------------------ Gradle 5.3.1 ------------------------------------------------------------ Build time: 2019-03-28 09:09:23 UTC Revision: f2fae6ba563cfb772c8bc35d31e43c59a5b620c3 Kotlin: 1.3.21 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 1.8.0_201 (Oracle Corporation 25.201-b09) OS: Mac OS X 10.12.6 x86_64
依存ライブラリ
groovy
1plugins { 2 id 'org.springframework.boot' version '2.1.4.RELEASE' 3 id 'java' 4 id 'war' 5} 6 7apply plugin: 'io.spring.dependency-management' 8 9group = 'com.example.spring' 10version = '0.0.1-SNAPSHOT' 11sourceCompatibility = '1.8' 12 13configurations { 14 compileOnly { 15 extendsFrom annotationProcessor 16 } 17} 18 19repositories { 20 mavenCentral() 21 maven { 22 url "https://plugins.gradle.org/m2/" 23 } 24} 25 26dependencies { 27 implementation 'org.springframework.boot:spring-boot-starter-jdbc' 28 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 29 implementation 'org.springframework.boot:spring-boot-starter-validation' 30 implementation 'org.springframework.boot:spring-boot-starter-web' 31 implementation 'org.springframework.boot:spring-boot-starter-security' 32 compileOnly 'org.projectlombok:lombok' 33 runtimeOnly 'org.springframework.boot:spring-boot-devtools' 34 runtimeOnly 'com.h2database:h2' 35 annotationProcessor 'org.projectlombok:lombok' 36 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 37 testImplementation 'org.springframework.boot:spring-boot-starter-test' 38 implementation 'org.webjars:jquery:1.11.1' 39 implementation 'org.webjars:bootstrap:3.3.7-1' 40 implementation 'org.springframework.boot:spring-boot-starter-aop' 41 implementation 'org.springframework:spring-aop' 42 implementation 'org.springframework.security:spring-security-test' 43 implementation 'org.aspectj:aspectjweaver' 44 // implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4' 45 compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4', version: '2.1.2.RELEASE' 46}
コード
Model
java
1package com.example.spring.login.domain.model; 2 3import lombok.Data; 4 5@Data 6public class User { 7 8 private String userId; 9 private String password; 10 private String userName; 11 private int age; 12 private boolean marriage; 13 private String role; 14}
Dao
java
1package com.example.spring.login.domain.repository; 2 3import java.util.List; 4import org.springframework.dao.DataAccessException; 5import com.example.spring.login.domain.model.User; 6 7 8public interface UserDao { 9 10 // Userテーブルの件数を取得 11 public int count() throws DataAccessException 12 13} 14
Controller
Java
1import com.example.spring.login.domain.model.User; 2 3//(中略) 4 5@Controller 6public class HomeController { 7 8 @GetMapping("/userDetail/{id:.+}") 9 public String getUserDetail(@ModelAttribute SignupForm form, Model model, 10 @PathVariable("id") String userId) { 11 12 if (userId != null && userId.length() > 0) { 13 User user = userService.selectOne(userId); 14 15 form.setUserId(user.getUserId()); 16 form.setUserName(user.getUserName()); 17 form.setBirthday(user.getBirthday()); 18 form.setAge(user.getAge()); 19 form.setMarriage(user.isMarriage()); 20 21 // register model 22 model.addAttribute("signupForm", form); 23 } 24 25 return "login/homeLayout"; 26 } 27}
Test
Java
1package com.example.spring; 2 3import static org.junit.Assert.*; 4 5import com.example.spring.login.domain.repository.UserDao; 6import org.junit.Test; 7import org.junit.runner.RunWith; 8import org.springframework.beans.factory.annotation.Autowired; 9import org.springframework.beans.factory.annotation.Qualifier; 10import org.springframework.boot.test.context.SpringBootTest; 11import org.springframework.test.context.junit4.SpringRunner; 12import org.springframework.transaction.annotation.Transactional; 13 14@RunWith(SpringRunner.class) 15@SpringBootTest 16@Transactional 17public class UserDaoTest { 18 19 @Autowired 20 @Qualifier("UserDaoJdbcImpl") 21 UserDao dao; 22 23 // test for count method 24 @Test 25 public void countTest1() { 26 assertEquals(dao.count(), 2); 27 } 28}
エラー
Error:(85, 32) java: シンボルを見つけられません シンボル: メソッド getUserId() 場所: タイプcom.example.spring.login.domain.model.Userの変数 user Error:(86, 34) java: シンボルを見つけられません シンボル: メソッド getUserName() 場所: タイプcom.example.spring.login.domain.model.Userの変数 user ・・・(以下同様)


