当我这样做时,我遇到了一个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”,但是它给出了未找到的可运行对象(初始化错误)。
我该如何处理以修复断言错误和可运行错误?我只想在值之间使用一个制表符。
答案 0 :(得分:1)
您真的需要检查制表符和空格吗? 如果没有,则将您的字符串结果传递给新方法,该方法将解决间距问题。 或者,您可以简单地返回一个值数组,而忽略空白,如下所示。
public static String[] getValues(String input){
//tokenize
String[] values = input.split("\\s+");
return values;
}
然后可以使用断言来比较预期数组和实际数组。