我正在使用Mockito测试我的spring项目,但是@injectmocks
似乎无法将一个模拟服务注入到另一个spring服务(bean)中。
下面是我想测试的spring服务:
@Service
public class CreateMailboxService {
@Autowired UserInfoService mUserInfoService; // this should be mocked
@Autowired LogicService mLogicService; // this should be autowired by Spring
public void createMailbox() {
// do mething
System.out.println("test 2: " + mUserInfoService.getData());
}
}
下面是我要嘲弄的服务:
@Service
public class UserInfoService {
public String getData() {
return "original text";
}
}
我的测试代码在这里:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class CreateMailboxServiceMockTest {
@Mock
UserInfoService mUserInfoService;
@InjectMocks
@Autowired
CreateMailboxService mCreateMailboxService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void deleteWithPermission() {
when(mUserInfoService.getData()).thenReturn("mocked text");
System.out.println("test 1: " + mUserInfoService.getData());
mCreateMailboxService.createMailbox();
}
}
但结果是
test 1: mocked text
test 2: original text // I want this be "mocked text", too
似乎CreateMailboxService没有得到模拟的UserInfoService而是使用了spring的autowired Bean。为什么我的@injectmocks
不能工作?
可以在CreateMailboxService
类中为MUserInfoService
创建Package
级别设置器。
@Service
public class CreateMailboxService {
@Autowired UserInfoService mUserInfoService; // this should be mocked
@Autowired LogicService mLogicService; // this should be autowired by Spring
public void createMailbox() {
// do mething
System.out.println("test 2: " + mUserInfoService.getData());
}
void setUserInfoService(UserInfoService mUserInfoService) {
this.mUserInfoService = mUserInfoService;
}
}
然后,您可以使用setter在测试中注入该模拟。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class CreateMailboxServiceMockTest {
@Mock
UserInfoService mUserInfoService;
CreateMailboxService mCreateMailboxService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mCreateMailboxService = new CreateMailboxService();
mCreateMailboxService.setUserInfoService(mUserInfoService);
}
...
}
这样就可以避免@injectmocks
和spring注释的问题。
我正在使用Mockito,并试图将一个Mock CustomFileHandler注入到我的Rejercciiodao类中以进行测试。问题是,我的测试没有抛出任何异常,但它没有注入我的模拟对象,原始的@Autowired CustomFileHandler没有被替换。这是我的代码: 这是我的测试: 顺便说一句,实体按预期工作,接口正确链接到实际实体,我已经测试过了。我该如何解决这个问题?
我试图让CDI在tomcat 9.x中工作。我遵循了以下链接,但openwebbeans容器仍然没有将资源注入servlet https://devlearnings.wordpress.com/2011/05/15/apache-openwebbeans-cdi-from-standalone-to-webapp/https://dzone.com/articles/using-apache-o
文件src/main/webapp/WEB-INF/web.xml包含用于引导CDI的servlet侦听器和BeanManager引用: 通过这些设置,在使用mvn Jetty运行应用程序时,我总是遇到以下错误:run(第一行是最重要的): 应用程序正在运行,但正如异常消息所述:CDI注入在servlet中不可用。 在src/main/resources/log4j.properties中,我增加
我正在构建一个Quarkus应用程序,它使用resteasy处理http请求,并使用restclient调用另一个api,我需要传播一个头并动态添加另一个头,所以我添加了一个实现ClientHeadersFactory的类。 代码如下: 我的问题是配置的注入不起作用。我使用和两种方法都进行了尝试,如的javadoc所述。我也试图使类不抽象,但它没有改变任何东西。 MicroServicesConf
我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?
问题内容: 我正在尝试使用Java批注,但似乎无法使我的代码认识到其中存在。我究竟做错了什么? 问题答案: 您需要使用注释界面上的@Retention注释将注释指定为运行时注释。 即