May*_*day 8 java spring spring-test spring-boot spring-boot-test
我正在尝试使用构造函数注入依赖模式。
我想知道在集成测试类上注入 JPA 存储库的正确方法是什么:
我有我的源代码:
回购类
@Repository
public interface MyClassRepo extends JpaRepository<MyClass, Long> {
... methods ...
}
Run Code Online (Sandbox Code Playgroud)
构造函数注入后的服务
public class MyClassService {
private final MyClassRepo myClassRepo;
public DeviceServiceImpl(final MyClassRepo myClassRepo) {
this.myClassRepo = myClassRepo;
}
public boolean myMethodToTest() {
... whatever...
}
}
Run Code Online (Sandbox Code Playgroud)
测试一下:(这是我的问题)
SpringRunner 类选项 1:构造函数注入
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfigClass.class) // With necessary imports
@SpringBootTest
public class MyClassTester {
private final MyClassService myClassService;
private final MyClassRepository myClassRepository;
public MyClassTester (final MyClassRepository deviceRepository) {
this.myClassRepository = myClassRepository;
this.myClassService= new myClassService(myClassRepository);
}
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为控制台输出说:
测试类应该只有一个公共零参数构造函数
SpringRunner 类选项 2:自动装配注入
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfigClass.class) // With necessary imports
@SpringBootTest
public class MyClassTester {
@Autowired
private MyClassRepository myClassRepository;
private MyClassService myClassService = new myClassService(myClassRepository);
}
Run Code Online (Sandbox Code Playgroud)
我觉得它正在打破所需的模式。
SpringRunner 类选项 3:空构造函数
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfigClass.class) // With necessary imports
@SpringBootTest
public class MyClassTester {
private final MyClassService myClassService;
private final MyClassRepository myClassRepository;
public MyClassTester () {
this.myClassRepository = new MyClassRepository(); // Obviously NOT working, since its an interface
this.myClassService= new myClassService(myClassRepository);
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论:显然不起作用,因为 MyClassRepository 它是一个接口
有没有更好的方法来解决这个问题?
| 归档时间: |
|
| 查看次数: |
4032 次 |
| 最近记录: |