Gradld Build - 使用Mockito创建的模拟对象来运行单元测试

时间:2016-08-01 17:53:04

标签: java spring gradle spring-boot mockito

我有一个连接到外部Web服务的Spring Boot应用程序。该项目使用gradle构建。我在我的程序中嘲笑外部调用。当我在STS中作为junit test运行时,测试成功运行。但是当我进行“gradle build”时,测试失败了。当我查看日志时,我认为它失败了,因为测试是在击中实际服务而不是返回模拟对象。为了让我的gradle构建选择mockito生成的模拟对象作为测试的一部分,我还需要做些什么吗?

let root = findfile('CMakeLists.txt', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';')

ApplicationWrapper代码

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ProxyApplication.class)
@WebAppConfiguration
public class ApplicationWrapperTest {

    @Mock
    private SoapClient soapClient;

    @InjectMocks
    @Autowired
    private ApplicationWrapper applicationWrapper;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testDatesInApplication() throws Exception{
      //return mock object (webservice response) when soapClient is called
    }

1 个答案:

答案 0 :(得分:3)

是的,您正在使用实际服务,因为您正在使用通过ProxyApplication.class插入的bean。问题是你混合了两种测试方法:Mockito和Spring。

要避免这些,您有以下几种选择:

  1. 运行没有SpringJUnit4ClassRunner.class和Spring配置的测试。删除@Autowired。使用MockitoJUnitRunner.class。这将是真正的单元测试

    @RunWith(MockitoJUnitRunner.class)
    public class ApplicationWrapperTest {
    
    @Mock
    private SoapClientFactory soapClientFactory;
    
    @Mock
    private SoapClient soapClient;
    
    @InjectMocks
    private ApplicationWrapper applicationWrapper;
    
    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
    
    @Test
    public void testDatesInApplication() throws Exception{
      when(soapClientFactory.getClient(eq("yourclientid"))).thenReturn(soapClient);
      //return mock object (webservice response) when soapClient is called
    }
    
  2. 为Spring配置创建spring test配置类,其中soapClient配置为Mock。