質問編集履歴

1 実行環境について追記

KazukiMaeda

KazukiMaeda score 8

2019/04/17 18:11  投稿

lombokの@Dataで生成されるgetter/setterがJUnitで見つからない
### 質問
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  
plugins {  
   id 'org.springframework.boot' version '2.1.4.RELEASE'  
   id 'java'  
   id 'war'  
}  
 
apply plugin: 'io.spring.dependency-management'  
 
group = 'com.example.spring'  
version = '0.0.1-SNAPSHOT'  
sourceCompatibility = '1.8'  
 
configurations {  
   compileOnly {  
       extendsFrom annotationProcessor  
   }  
}  
 
repositories {  
   mavenCentral()  
   maven {  
       url "https://plugins.gradle.org/m2/"  
   }  
}  
 
dependencies {  
   implementation 'org.springframework.boot:spring-boot-starter-jdbc'  
   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'  
   implementation 'org.springframework.boot:spring-boot-starter-validation'  
   implementation 'org.springframework.boot:spring-boot-starter-web'  
   implementation 'org.springframework.boot:spring-boot-starter-security'  
   compileOnly 'org.projectlombok:lombok'  
   runtimeOnly 'org.springframework.boot:spring-boot-devtools'  
   runtimeOnly 'com.h2database:h2'  
   annotationProcessor 'org.projectlombok:lombok'  
   providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'  
   testImplementation 'org.springframework.boot:spring-boot-starter-test'  
   implementation 'org.webjars:jquery:1.11.1'  
   implementation 'org.webjars:bootstrap:3.3.7-1'  
   implementation 'org.springframework.boot:spring-boot-starter-aop'  
   implementation 'org.springframework:spring-aop'  
   implementation 'org.springframework.security:spring-security-test'  
   implementation 'org.aspectj:aspectjweaver'  
   // implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4'  
   compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4', version: '2.1.2.RELEASE'  
}  
```  
### コード
#### Model
```java
package com.example.spring.login.domain.model;
import lombok.Data;
@Data
public class User {
   private String userId;
   private String password;
   private String userName;
   private int age;
   private boolean marriage;
   private String role;
}
```
#### Dao
```java
package com.example.spring.login.domain.repository;
import java.util.List;
import org.springframework.dao.DataAccessException;
import com.example.spring.login.domain.model.User;
public interface UserDao {
   // Userテーブルの件数を取得
   public int count() throws DataAccessException
}
```
#### Controller
```Java
import com.example.spring.login.domain.model.User;
//(中略)
@Controller
public class HomeController {
   @GetMapping("/userDetail/{id:.+}")
   public String getUserDetail(@ModelAttribute SignupForm form, Model model,
           @PathVariable("id") String userId) {
       if (userId != null && userId.length() > 0) {
           User user = userService.selectOne(userId);
           form.setUserId(user.getUserId());
           form.setUserName(user.getUserName());
           form.setBirthday(user.getBirthday());
           form.setAge(user.getAge());
           form.setMarriage(user.isMarriage());
           // register model
           model.addAttribute("signupForm", form);
       }
       return "login/homeLayout";
   }
}
```
#### Test
```Java
package com.example.spring;
import static org.junit.Assert.*;
import com.example.spring.login.domain.repository.UserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class UserDaoTest {
   @Autowired
   @Qualifier("UserDaoJdbcImpl")
   UserDao dao;
   // test for count method
   @Test
   public void countTest1() {
       assertEquals(dao.count(), 2);
   }
}
```
### エラー
```
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
・・・(以下同様)
```
  • Java

    24868 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • JUnit

    335 questions

    JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る