我是第一次在visual studio 2013中编写单元测试。
我正在尝试编写测试用例以确保:新密码不应包含用户全名的任何4个连续字符。
假设用户的全名是:“John Yan”,那么如果用户输入密码“HnYa @ 123”,它就会失败。
这是我的代码
[TestMethod]
public void Password_Contain_4_Successive_Characters_Of_User_FullName()
{
UserInformation u = new UserInformation();
string newPassword = "Mave@123";
string username = "mary@mywebsite.com";
var browser = BrowserWindow.Launch(browserURL);
ClickLink(browser, "Patient");
ClickLink(browser, "here");
EnterText(browser, "username", username);
ClickButtion(browser, "Reset");
browser.Close();
var changePasswordBrowser = BrowserWindow.Launch(browserChangePasswordURL);
EnterText(changePasswordBrowser, "UserLogin", username);
EnterText(changePasswordBrowser, "TemporaryPassword", u.GetTemporaryPassword(username));
EnterText(changePasswordBrowser, "NewPassword", newPassword);
EnterText(changePasswordBrowser, "ConfirmNewPassword", newPassword);
ClickButtion(changePasswordBrowser, "Submit");
Assert.AreEqual(newPassword, u.GetUserPassword(username));
}
我应该使用哪个Assert.
,如果新密码包含4个用户全名的连续字符,单元测试会失败?
答案 0 :(得分:1)
虽然目前接受的answer似乎解决了您的确切问题,但您并不觉得自己真的在问正确的问题。单元测试的目的是确保您的生产逻辑能够满足您的期望。它不是为了实现您的业务逻辑。
查看您的问题,您的要求似乎是:
这是需要在生产代码中实施的业务规则。所以,在伪代码中,你会得到:
if(StringContainsSuccessiveCharacters(newPassword, u.GetFullName(), 4)) {
// Handle Error Situation
}
else {
// Password is fine, proceed (save to db, do other checks etc)
}
在测试中,您将提供不同的FullName和密码(例如@Ruskin中的测试用例),以便运用您的代码并确保在新密码执行包含4个连续的字符,发生了可观察的错误情况,并且当它没有成功的情况发生时。所以,你最终可能会得到一些像这样的测试:
WhenPasswordContains4SuccessiveCharactersFromNameErrorShouldBeDisplayed() {
string fullName = "John Yan";
string newPassword = "HnYa@123";
// Do setup stuff (mocks/browser etc)
// Try and set password to newPassword
// Validate that validation error was triggered
// Which could be as simple as checking that the password isn't changed
}
PasswordCanBeChangedWhenAllValidationRulesPass() {
string fullName = "John Yan";
string newPassword = "ZYXW@123";
// Do setup stuff (mocks/browser etc)
// Try and set password to newPassword
// Validate that success condition, such as navigating to new page
// or that the password is actually updated.
}
重点是您的测试是为了确保您的生产代码符合您的要求。如果您在问题中查看示例测试,则可以看到您提供的值为newPassword
。在编写测试时,您知道newPassword
是否包含FullName
中的相关字符。为它添加断言不会测试您的生产代码,它只是测试您是否正确连接了测试。
答案 1 :(得分:0)
没有一个断言方法,如果一个字符串包含另一个字符串的任何后续子字符串,它就会失败。但您可以使用以下代码实现此功能
var userName = u.GetUserPassword(username));
for (int i = 0; i < userName.Length; ++i)
for (int j = i + 1; j < userName.Length; ++j)
if (newPassword.Contains(userName.Substring(i, j - i)))
Assert.Fail();
答案 2 :(得分:0)
以上标记的答案不适用于以下所有测试用例,请尝试:
np.treeposition()+"[0]"*