java - 使用 mockito 注入具有真实参数的 bean
问题描述
我正在尝试使用 mockito 编写一个单元测试用例,并且我想注入一个带有真实参数而不是模拟参数的 bean。
该 bean 有一些从 .properties 文件中读取的字符串值。
@Component
public class SomeParameters {
@Value("${use.queue}")
private String useQueue;
}
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
private A a;
@Autowired
private SomeParameters someParameters;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMethod() {
if(someParameters.getUseQueue==true){
//do something
}else{
/bla bla
}
}
我的主要目标是运行具有真实场景的测试用例。我不想使用模拟值。
我能够以这种方式注入带有真实参数的bean。但这是单元测试用例,而不是集成测试。所以我不应该给applicationContext。你能指导我如何处理这种情况吗?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContextTest.xml"})
public class ServiceTest {
解决方案
如果您想使用spring-context,那么您应该为您的测试创建一个配置(通过 xml 或 java 配置)并只声明您需要的 bean。例如
对于设置属性只需声明@TestPropertiesSource("use.queue=someValue")
,否则您需要从测试资源中读取值。
PS。还要特别检查@MockBean 和@SpyBean@SpyBean
推荐阅读
- excel - 如何转到活动单元格的参考?
- java - Forge MDK runClient 崩溃,可能是因为 LWJGL。我该如何解决?
- c++ - 使用类和方法的链表,OOP C++
- arrays - 在 Go 中将数组复制到切片
- oracle-sqldeveloper - 根据条件在两个不同的列上连接两个表
- javascript - TypeScript 装饰器中的异步调用
- azure - 找不到文件“D:\home\site\wwwroot\tempkey.rsa”
- python - 通过身份验证在代理后面发送邮件
- sql-server - SSRS 报告页脚不会显示
- c++ - “抛出表达式代码” return d > 1e7 是什么?抛出 std::overflow_error("太大") : d; 意思是?