将模拟对象作为JUnit参数传递给带参数的测试方法

时间:2015-08-23 20:15:09

标签: java unit-testing junit

我使用junit参数化方法进行单元测试。

最初,我曾经按照常规参数化方法来测试我的工作流程1。 但后来我发现这个文档2提供了一种更好,更简洁的方法来测试使用参数。 但是,我无法找到将模拟对象传递给测试方法的方法。

@TestWith({
        "null, mock(B.class),mock(C.class)",
        "mock(A.class), null, mock(C.class)",
        "mock(A.class), mock(B.class), null"
})
public void test_workflow(final A Aclass,final B Bclass,final C Cclass)
{
    assertThat....
}

我得到非法争论例外:

java.lang.IllegalArgumentException:无法将字符串“mock(B.class)”解释为类B.class     在com.googlecode.zohhak.internal.coercing.CoercingService.coerceParameter(CoercingService.java:58)     在com.googlecode.zohhak.internal.coercing.CoercingService.coerceParameters(CoercingService.java:33)     在com.googlecode.zohhak.internal.Executor.calculateParameters(Executor.java:28)     在com.googlecode.zohhak.internal.junit.ParametrizedFrameworkMethod.invokeExplosively(ParametrizedFrameworkMethod.java:22)

有谁知道如何将模拟对象作为参数传递给测试方法?这将是一个很大的帮助,我将继续努力在我的最终解决它。

1 个答案:

答案 0 :(得分:2)

https://github.com/piotrturski/zohhak/blob/master/Full-Guide.md#basic-usage

  

Zohhak默认支持:

primitives and their wrappers
nulls
enums
String
BigInteger, BigDecimal (since 1.1.0)
     

和可从中分配的类型(例如,Number,CharSequence,Object)。   参数用逗号分隔,边缘白色字符被修剪   (除非使用撇号)。

所以你需要写一个coersion方法 这将读取类名并创建模拟对象 https://github.com/piotrturski/zohhak/blob/master/Full-Guide.md#registering-coercions