【发布时间】:2020-06-12 05:26:19
【问题描述】:
我有一个 Android 应用的测试用例,它验证视频播放器活动中的时间在用户快进和快退视频 15 秒时不会改变。测试工作如下:
- 打开视频播放器,让视频播放几秒钟。
- 暂停视频并检查时间戳。
- 按“快进 15 秒”按钮,然后按“快退 15 秒”按钮。
- 检查新的时间戳是否相同。
时间戳采用 hh:mm:ss 格式。我使用以下方法以秒为单位获取播放时间:
private int getPlayTime() {
String timestamp = getTimestamp();
return Integer.parseInt(timestamp.substring(0, 2)) * 3600 +
Integer.parseInt(timestamp.substring(3, 5)) * 60 +
Integer.parseInt(timestamp.substring(6)) ;
}
getTimestamp() 从 Android 视图中获取时间戳字符串:
private String getTimestamp() {
AppCompatTextView playTime = (AppCompatTextView) solo.getView(/* View ID */);
return (String) playTime.getText();
}
这是断言语句:
assertEquals("Rewinding should bring us back 15 seconds. Start = " + startTime + ", end = " + endTime, startTime, endTime);
虽然值相同,但AssertEquals() 有时会返回失败:java.lang.AssertionError: Time should advance by 15 seconds. Start = 37, end = 37
这种情况发生的几率不到 10%,而且不容易重现。我完全失去了解释。这可能是 JUnit 错误吗?
【问题讨论】:
-
这条消息不是关于倒带,而是关于前进。这是一个不同的断言
-
您能确认
hh:mm:ss时间戳字符串是相同的吗? -
@csum:我很确定它们是一样的。
-
startTime 和 endTime 的类型是什么?它们是字符串,它们是否有可能包含不可打印的字符?它们是否与产生相同输出的
toString()s 不同类型? -
"我用下面的方法来获取播放时间,以秒为单位:" 所以
01:02:03是6秒的播放时间?
标签: java junit4 android-testing