junit.framework.AssertionFailedError并且由于空白而没有可运行的方法

时间:2018-07-30 22:46:12

标签: java unit-testing junit whitespace assert

当我这样做时,我遇到了一个junit.framework.AssertionFailedError:

assertEquals("123 \t July \t testuser \t USD \t one two \t pnl \t ACTUALS_STAGE \t product_line \t pnl", tabs );

错误:

expected:<123[   July    testuser    USD     one two     pnl     ACTUALS_STAGE   product_line    ]pnl>
but was:<123[   July    testuser    USD one two pnl ACTUALS_STAGE   product_line    ]pnl>

“ tabs”从正在测试的函数中获取制表符分隔的参数。该断言由于空白问题而失败。空格将在值之间加上一个制表符。

测试代码:

@Before
    public void setUp() throws Exception {
        List<String> list = Arrays.asList("one", "two");
        List<String> scenarioList = Arrays.asList("ACTUALS_STAGE");
        List<Map<String, List<String>>> filter = new ArrayList<>();
        Map<String, List<String>> filtersMap = new HashMap<>();
        List<String> filterList = Arrays.asList("A1PCON");
        filtersMap.put("product_line", filterList);
        filter.add(filtersMap);

        reportQueryParams = ReportQueryParams.builder()
                .id("123").currency("USD").companies(list).cognosDatasetType("pnl").scenarios(scenarioList)
                .filters(filter).reportTemplate("pnl")
                .build();
    }

    @Test
    public void tabSerializerTest() {
        String remoteUser = "testuser";
        HttpServletRequest httpServletRequest = Mockito.mock(HttpServletRequest.class);
        Mockito.when(httpServletRequest.getRemoteUser())
               .thenReturn(remoteUser);
        MetricsSerializer metricsSerializer = new MetricsSerializer();
        String tabs = metricsSerializer.serializeMetrics(reportQueryParams, httpServletRequest);
        assertEquals("123 \t July \t testuser \t USD \t one two \t pnl \t ACTUALS_STAGE \t product_line \t pnl", tabs );
    }

例如:

abc \ t pqr:这将显示第一个值,添加空格,添加标签,添加空格,然后显示第二个值。

预期:abc \ tpqr

如果我执行“ abc \ tpqr”,则会出现以下错误:

No runnable method found.

我已经用@Test对其进行了注释,如果我执行“ abc \ t pqr”,则可以使用

我还尝试执行“ abc” +“ \ t”“ pqr”,但是它给出了未找到的可运行对象(初始化错误)。

我该如何处理以修复断言错误和可运行错误?我只想在值之间使用一个制表符。

1 个答案:

答案 0 :(得分:1)

您真的需要检查制表符和空格吗? 如果没有,则将您的字符串结果传递给新方法,该方法将解决间距问题。 或者,您可以简单地返回一个值数组,而忽略空白,如下所示。

public static String[] getValues(String input){
  //tokenize 
  String[] values = input.split("\\s+");  
  return values;    

}

然后可以使用断言来比较预期数组和实际数组。