Java 用Mockito模拟场注入
我是JUnit PowerMockito的新手。我试图在一个类中测试一个方法。这个类有一个自动连接的字段。 服务等级Java 用Mockito模拟场注入,java,junit,powermock,powermockito,Java,Junit,Powermock,Powermockito,我是JUnit PowerMockito的新手。我试图在一个类中测试一个方法。这个类有一个自动连接的字段。 服务等级 @Service public class MyServiceRegistration { @Autowired private AppConfig appConfig; public void register() throws xception { //Do some thing } } AppConfig @Comp
@Service
public class MyServiceRegistration
{
@Autowired
private AppConfig appConfig;
public void register() throws xception
{
//Do some thing
}
}
AppConfig
@Component
public class AppConfig
{
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private String serverPort;
//getter and setter
}
测试班
@RunWith(PowerMockRunner.class)
@PrepareForTest({ AppConfig.class })
@PowerMockIgnore({ "javax.management.*" })
public class MyServiceRegistrationTest
{
@InjectMocks
MyServiceRegistration myServiceRegistration = new MyServiceRegistration();
@Mock
private AppConfig appConfig;
@Before
public void setUp() throws Exception
{
PowerMockito.when(AppConfig.getApplicationName()).thenReturn("SomeValue");
MockitoAnnotations.initMocks(this);
}
public final void testRegister() throws Exception
{
myServiceRegistration.register();
}
}
当我调试代码时,我可以看到AppConfig被模拟了。但是applicationName和serverPort字段为空
调试屏幕
如何解决此问题?
PowerMockito.when(AppConfig.getApplicationName()).thenReturn("SomeValue");
到
testRegister
方法。现在它可以工作了。代码的问题是注入模拟两次
- 首先,它们由
@RunWith(PowerMockRunner.class)
- 第二次,手动使用
MockitoAnnotations.initMocks(this)代码>
@之前
public void setUp()引发异常
{
当(appConfig.getApplicationName())。然后返回(“SomeValue”);
AppConfig beforeInitMocks=AppConfig;
initMocks(this);
AppConfig afterInitMocks=AppConfig;
System.out.println(“相同对象:”+(beforeInitMocks==afterInitMocks));
}
注意:我相信你的帖子中有输入错误,你应该有
PowerMockito.when(appConfig.getApplicationName())
(小写appConfig
)这是一个创可贴。我认为Lesiak的答案是真正的问题。