Кажется, что @RequiredArgsConstructor не работает в приведенном ниже коде - но только в тесте, использующем структуру Spock, и только для поля, имеющего тип интерфейса Dao
.
Строго говоря - theкод работает , хотя, на мой взгляд, он не должен работать, учитывая, что подобный тест в JUnit5 вообще не компилируется.
Может кто-нибудь объяснить, это ошибка или особенность?
package brumba;
public interface Dao {
Integer getValueFor(Integer value);
}
package brumba;
import com.sun.istack.internal.NotNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Brumba {
@NotNull
final private Dao dao;
// If you uncomment the below 2 lines, then the test fails
// @NotNull
// final private String name;
public Integer twice(Integer x){
return x * 2;
}
public Integer twiceDao(Integer x){
return dao.getValueFor(x);
}
}
Приведенный ниже код работает нормально - но только в Spock (аналогичный тест под JUnit5 не компилируется).
Кажется, что тест Спока каким-то образом видитконструктор по умолчанию без аргументов (в то время как тест JUnit не видит этот конструктор)
Но когда 2 комментария, приведенные выше, не были закомментированы, то проверка завершилась неудачей со следующей ошибкой:
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: brumba.Brumba()
package brumba
import spock.lang.Specification
class BrumbaTest extends Specification {
def "twice should multiply argument by 2"() {
given:
def testedObject = new Brumba();
expect:
y == testedObject.twice( x )
where:
x | y
0 | 0
1 | 2
2 | 4
3 | 6
}
}
И этот тест JUnit не компилируется вообще:
package brumba;
class BrumbaJUnit5Test {
@org.junit.jupiter.api.Test
void shouldTwice() {
Brumba br = new Brumba();
}
}
ошибка:
Error:(7, 21) java: constructor Brumba in class brumba.Brumba cannot be applied to given types;
required: brumba.Dao,java.lang.String
found: no arguments
Вот зависимости, которые я использую для этого проекта:
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>1.2-groovy-2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.0-M1</version>
<scope>test</scope>
</dependency>