我已经使用WatiN编写了一个测试,当使用F10逐步执行代码时,测试成功,但是当我从上下文菜单执行'Run Test'命令时,测试失败。
这是我的测试:
[TestMethod]
[STAThread]
public void Should_show_captcha_after_three_invalid_login_attempts_with_invalid_username()
{
// Given
int numberOfLoginAttempts = 3;
// When
for (int loginAttempt = 1; loginAttempt <= numberOfLoginAttempts; loginAttempt++)
{
EnterUsername(LoginSettings.ValidUserName);
EnterPassword(loginAttempt.ToString());
ClickLoginButton();
// Check we are still on the loginpage
Assert.IsTrue(_browser.Title.Contains("Inloggen"));
}
bool isCaptchaVisible = _browser.Page<LoginPage>().Captcha.Exists;
// Then
Assert.IsTrue(isCaptchaVisible);
// Make sure to clear the login attempts for next test cases
RemoveLoginAttempts();
}
仅供参考:在数据库中,我们会根据用户名跟踪loginAttempts。当loginattempts的数量是> 2,显示验证码。我遇到的问题是DB中的计数器保持为1.当我手动完成测试时,计数器会增加。
这怎么可能?
答案 0 :(得分:2)
你是对的,它必须是时机。然而,问题的一部分是这不是一个单元测试,另一个是你要假设在执行另一行测试代码之前已经完成的大量异步工作,这些测试代码是在假设它编写的具有
例如,登录尝试循环中的计数绝对不是数据库中的计数。一切都是平等的,它应该匹配,但是..
所以对我来说,你应该对登录功能进行测试。 如果不成功,则在db中记录colunt,如果成功则重置该计数。 然后进行另一个测试,看看当db中的登录尝试超过限制时,登录响应会检测到并显示正确的响应。
如果您想加入所有这些以进行端到端/白盒测试。然后应该使用某些描述的自动化测试。
我怀疑Windows,浏览器,您的网络服务器甚至您的dbms没有时间完成第一次登录尝试的处理,然后排队等待另外两次,然后完成测试。而在调试模式中,只要你踩到它们就会有足够的时间。