我正在尝试在一个Spring-Boot项目中编写一个测试。我的问题是我不能使用包含构造函数注入的服务。
具有构造函数注入的服务类:
PlayerServiceImpl.java
@Service
public class PlayerServiceImpl implements PlayerService {
private PlayerRepository playerRepository;
private CompanyService companyService;
private CompanyResourceService companyResourceService;
@Autowired
public PlayerServiceImpl(PlayerRepository thePlayerRepository, CompanyService theCompanyService,
CompanyResourceService theCompanyResourceService) {
this.playerRepository = thePlayerRepository;
this.companyService = theCompanyService;
this.companyResourceService = theCompanyResourceService;
}
...
}
im试图创建的测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class PlayerServiceImplIntegrationTest {
@TestConfiguration
static class PlayerServiceImplTestContextConfiguration {
private PlayerRepository playerRepository;
private CompanyService companyService;
private CompanyResourceService companyResourceService;
@Bean
public PlayerService playerService() {
return new PlayerServiceImpl(playerRepository, companyService, companyResourceService);
}
}
@Autowired
private PlayerService playerService;
@MockBean
private PlayerRepository playerRepository;
@Before
public void setUp() {
Player max = new Player("MaxMustang", "test123", "MaxMustang",
"max.mustang@test.com", new Date(System.currentTimeMillis()), 1, 0,
new BigDecimal("0.00"), new BigDecimal("0.00"), 0, 0);
Mockito.when(playerRepository.findByUserName(max.getUserName()))
.thenReturn(max);
}
@Test
public void whenFindById_thenReturnPlayer() {
String userName = "MaxMustang";
Player found = playerService.findByUserName(userName);
assertThat(found.getUserName()).isEqualTo(userName);
}
}
在我的测试中,我试图创建一个player对象并接收它。这只是我第一次穿春靴测试。我的主要目标是让测试运行起来。而最初的测试来自“5.mockingwith@mockbean”中的Baeldung。但在四处实验的同时,我增加或改变了一些东西。
如果我错过了一篇针对相同问题的文章,我将很高兴得到有关这一点的通知。
还有,如果有人能告诉我,我的服务的构造函数中的参数是太多了还是还在“OK”范围内,我将不胜感激。
您必须将配置bean设置为主要的,并在该方法上使用构造函数注入:
@TestConfiguration
static class PlayerServiceImplTestContextConfiguration {
@Bean
@Primary
public PlayerService playerService(PlayerRepository playerRepository,
CompanyService companyService, CompanyResourceService companyResourceService) {
return new PlayerServiceImpl(playerRepository, companyService, companyResourceService);
}
}
如果没有primary,您将会有两个相同类型的bean,并且在这里不使用@qualifier
。此外,在配置类中不能使用@autowire
bean,这就是为什么需要使用构造函数注入的原因。
问题内容: 这是一个愚蠢的问题,但是自从我使用Java以来已经有很长的时间了……我该如何用布尔值编写构造函数,还是应该编写默认构造函数?我最近一直在使用C ++,但是我忘记了Java的很多语法。 这是我到目前为止所拥有的: 搜索时似乎找不到任何东西…如何初始化构造函数中的每个值?还是我应该 我也有几个继承自这个类的类,所以我不确定这是否有所作为。 问题答案: 布尔参数与其他任何类型一样。 因此
问题内容: 我正在为这个错误而苦苦挣扎: 08-08 11:42:53.179:E / AndroidRuntime(20288):由以下原因引起:java.lang.InstantiationException:无法实例化com.example.localnotificationtest.ReminderService类;没有空的构造函数 我不明白为什么会发生此错误。 我试图在特定时间显示通知,
我有一个database.xml来定义spring事务,比如 和我的dao,服务都在utils包或子包中,比如: 提前感谢您的帮助和建议!
问题内容: 是否可以从另一个(在同一类中,而不是在子类中)调用构造函数?如果是,怎么办?调用另一个构造函数的最佳方法是什么(如果有几种方法可以做到)? 问题答案: 对的,这是可能的: 要链接到特定的超类构造函数而不是同一类中的构造函数,请使用代替。注意,你只能链接到一个构造函数,它必须是构造函数主体中的第一条语句。
问题内容: 基于此答案,我想在一个将从另一个文件导入的类中构建一个异步websoket客户端: 然后将其导入中,其中包含以下内容: 但是它检索到以下错误: 这是怎么回事?如果mtest.get_ticks开头是单词,为什么我不能访问它? 问题答案: 最后,我可以找到正确的方法(特别感谢 @dirn ) 这在main.py中: 这是输出: 任何改进的技巧都值得欢迎!;)
我想在构造函数中使用Request类,这是我想运行服务器时它给我的错误: 无法自动连接服务"AppBundle\Controller\DetectServiceDetailController":方法"__construct()"引用类"Symfony\Component\HttpFoundation\Request"的参数"$ask",但不存在这样的服务。它不能自动注册,因为它来自不同的根命名空