java - 如何使用 mockito 和 testNg 测试枚举中的默认值

标签 java unit-testing enums mockito testng

我有一个像这样的第三方枚举类:

package se.api;
public enum InvestigationResultStatus {
  PENDING("PendingResult.rr"),
  NEW("NewResult.rr"),
  MODIFIED("ModifiedResult.rr"),
  FINAL("FinalResult.rr"),
  PRELIMINARY("PreliminaryResult.rr"),
  ADDITIONAL("AdditionalResult.rr"),
  REJECTED("RejectedResult.rr"),
  COMPLETE("Path.Results.InvestigationInformation.Complete"),
  UNDEFINED("");

  private final String languageKey;

  private InvestigationResultStatus(String languageKey) {
    this.languageKey = languageKey;
  }

  public String getLanguageKey() {
    return this.languageKey;
  }
}

在我的代码中,我为这个类创建了枚举

package se.dto;
public enum InvestigationResultStatus
{
   PENDING,
   NEW,
   MODIFIED,
   FINAL,
   PRELIMINARY,
   ADDITIONAL,
   REJECTED,
   UNDEFINED
}

为了将这些 api 枚举映射到我的枚举,我创建了枚举映射器:

package se.mapper;

import se.dto.InvestigationResultStatus;

public class InvestigationResultStatusMapper
{
  public InvestigationResultStatus mapOmResultStatusToNovaResultStatus(final se.api.InvestigationResultStatus investigationResultStatus){
    switch (investigationResultStatus){
      case PENDING:
        return InvestigationResultStatus.PENDING;
      case NEW:
        return InvestigationResultStatus.NEW;
      case MODIFIED:
        return InvestigationResultStatus.MODIFIED;
      case FINAL:
        return InvestigationResultStatus.FINAL;
      case PRELIMINARY:
        return InvestigationResultStatus.PRELIMINARY;
      case ADDITIONAL:
        return InvestigationResultStatus.ADDITIONAL;
      case REJECTED:
        return InvestigationResultStatus.REJECTED;
      case UNDEFINED:
        return InvestigationResultStatus.UNDEFINED;
      default:
        throw new IllegalArgumentException("Unknown InvestigationResultStatus: " + investigationResultStatus);
    }
  }
}

现在我想测试 InvestigationResultStatusMapper 类的默认案例路径并抛出 IllegalArgumentException。我搜索并以多种方式尝试它。但是大多数示例都在使用 powermockito。但是我想要 mackito 和 testNg。我如何测试它。我用这个尝试它,

@Test(expectedExceptions = { IllegalArgumentException.class })
  public void testMapOmResultStatusToNovaResultStatus_whenHaveDefaultValue_thenThrowIllegalArgumentException()
  {
    se.api.InvestigationResultStatus investigationResultStatusNewEnum = mock(se.api.InvestigationResultStatus.class);
    Whitebox.setInternalState(investigationResultStatusNewEnum, "name", "DEFAULT");
    Whitebox.setInternalState(investigationResultStatusNewEnum, "ordinal", "DefaultResult.rr");

    se.api.InvestigationResultStatus investigationResultStatusCosmic = mock(se.api.InvestigationResultStatus.class);

    when(investigationResultStatusCosmic.values()).thenReturn(
        new se.api.InvestigationResultStatus[] { InvestigationResultStatus.PENDING, InvestigationResultStatus.NEW,
            se.api.InvestigationResultStatus.MODIFIED, InvestigationResultStatus.FINAL, InvestigationResultStatus.PRELIMINARY,
            se.api.InvestigationResultStatus.ADDITIONAL, InvestigationResultStatus.REJECTED,
            se.api.InvestigationResultStatus.COMPLETE, InvestigationResultStatus.UNDEFINED, investigationResultStatusNewEnum });

    investigationResultStatusMapper.mapOmResultStatusToNovaResultStatus(investigationResultStatusNewEnum);
  }

最佳答案

您可以直接创建实例以避免模拟。

@Test(expectedExceptions = { IllegalArgumentException.class })
public void testMapOmResultStatusToNovaResultStatus_whenHaveDefaultValue_thenThrowIllegalArgumentException()
{

  InvestigationResultStatus investigation = new InvestigationResultStatus();
  investigation.mapOmResultStatusToNovaResultStatus(-10000);
   ....

}

关于java - 如何使用 mockito 和 testNg 测试枚举中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606031/

相关文章:

unit-testing - 如何对以事件区域作为输入的函数进行单元测试?

android - 在 ActivityInstrumentationTestCase2 中模拟账户

swift - 我可以在不使用 switch 语句的情况下测试枚举值是否是特定情况吗?

java - Oracle 准备语句 - ORA-01821 : date format not recognized

c# - WPF - 在 Window 类中对方法进行单元测试时出现 XamlParseException

java - 如何从 java 中的 url 中提取 Web 服务的请求参数和 header

java - Java 编译时生成枚举

swift - Swift 5.1 中的递归枚举问题

java - 在 Jar 文件中加载类

java - 如何在JRE(Java Runtime Environment)中收集熵源?