当前位置: 首页 > 知识库问答 >
问题:

如何在参数化测试中使用@InjectMocks

怀浩大
2023-03-14

注意:我已经做了一个搜索和阅读了各种博客,但找不到一个例子,与我正在尝试做什么。

@RunWith(Parameterized.class)
public class ConverterServiceTest {

    @Parameters(name="{index}; Test case {0}")
    public static Collection<Object[]> initTestCases() {
        final Object[][] testCases = {
                { "One",   "First",   TypeEnum.ONE   },
                { "Two",   "Second",  TypeEnum.TWO   },
                { "Three", "Third",   TypeEnum.THREE },
                { "Four",  "Fourth",  TypeEnum.FOUR  },
                { "Five",  "Fifth",   TypeEnum.FIVE  },
                { "Six",   "Unknown", TypeEnum.BLANK }
        };
        return Arrays.asList(testCases);
    }

    @Parameter(0) private String   testName;
    @Parameter(1) private String   testCode;
    @Parameter(2) private TypeEnum expectedCode;

    @Rule public ExpectedException expected = ExpectedException.none();
    @Mock private CodeService codeService;
    @InjectMocks private ConverterService converter;

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

        when(codeService.isOne(anyString())).thenReturn(false);
        when(codeService.isOne("First")).thenReturn(true);

        when(codeService.isTwo(anyString())).thenReturn(false);
        when(codeService.isTwo("Second")).thenReturn(true);

        when(codeService.isThree(anyString())).thenReturn(false);
        when(codeService.isThree("Third")).thenReturn(true);

        when(codeService.isFour(anyString())).thenReturn(false);
        when(codeService.isFour("Fourth")).thenReturn(true);

        when(codeService.isFive(anyString())).thenReturn(false);
        when(codeService.isFive("Fifth")).thenReturn(true);
    }

    @Test public void testCodeConverter() {
        assertThat(converter.convert(testCode), equalTo(expectedCode));
    }
}

它似乎不喜欢我的某个测试成员字段是私有的,但没有告诉我它对哪个字段有问题。我见过的单元测试的所有例子,唯一公开的一定是ExpectedException规则。

共有1个答案

方树
2023-03-14

对不起,我是杜弗斯人。问题是@parameter(x)内部成员需要是public的,而不是private的。

我花了一大把时间在谷歌上搜索。:-)

 类似资料:
  • 问题内容: 在JUnit4中,您可以通过在一种方法中提供参数集合来编写参数化的单元测试,这些参数将被传递给测试的构造函数,并通过另一种方法进行测试。如果我有一个预期引发异常的参数,该如何指定? 问题答案:

  • 在JUnit 4中,通过使用注释很容易跨一堆类测试不变量。关键是一组测试正在针对单个参数列表运行。 如何在JUnit 5中复制这一点,而不使用JUnit-vintage? 不适用于测试类。听起来可能是合适的,但该注释的目标也是一个方法。 此类 JUnit 4 测试的一个示例是:

  • 使用Robolectric的参数化测试 原文链接 : Parameterized testing with Robolectric 译文出自 : 开发技术前线 www.devtf.cn 译者 : Lollypo 校对者: Chaos 状态 : 校对完成 在目前的项目中我们使用Robolectric为Android应用程序编写单元测试,它一直都干的不错。最近我需要编写一个测试用例,通过每次使用不同的

  • 我正在尝试从CSV文件运行参数化测试。 如果我只使用这样的CSVSource,它就会起作用: 但如果我从一个文件中尝试同样的方法,它将不起作用: 我也尝试过使用硬路径访问我的文件,但对于Eclipse中的文件测试,我总是能得到消息 找不到使用测试runnter“JUnit 5”的测试。 JUnit期望文件在哪里? 以下是我的依赖关系: 有人知道我可能遗漏了什么或者错误在哪里吗? 提前谢谢你 保罗

  • 我想用groovy和Spock测试这个类:

  • 我有一个类,它是有向无环图上拓扑排序的实现。此类中有两种方法: > 公共静态int[]排序(int[][]dag)-将表示DAG的二维数组作为参数,并返回有序节点的数组 私有静态无效访问-该访问执行深度优先搜索,并用于排序方法 我必须编写一个JUnit测试来测试具有不同输入的代码。我对JUnit测试比较陌生,不知道如何解决这个问题。我想我需要编写一个参数化测试,但是如何测试静态方法sort(int