Jestem nowy w testowaniu jednostkowym i próbuję przetestować niektóre z moich członkostwa .NET, które pisałem.Jak przystąpić do testowania członkostwa Asp.net?
Próbuję sprawdzić moją metodę VerifyUser
, która sprawdza, czy poświadczenia użytkowników są prawidłowe, czy nie.
Tak to jest, jak to wygląda:
public bool VerifyUser(string userName, string password)
{
bool valid = Membership.ValidateUser(userName, password);
return valid;
}
a teraz za każdym razem uruchomić mój testów jednostkowych zawiedzie. Wiem, że przekazuję odpowiednie referencje i takie tam. Wtedy zaświtało mi, że być może mój Test Project (który jest w tym samym Rozwiązaniu co mój prawdziwy projekt) może potrzebować własnego pliku web.config
z łańcuchem połączeń i podobnymi rzeczami. Lub plik konfiguracyjny aplikacji, ponieważ jest to projekt biblioteki aplikacji.
Po prostu skopiuj plik web.config
z mojego prawdziwego projektu i nazwij go dziennie? Czy powinienem brać tylko od niego części? A może po prostu jestem daleko.
Moja baza danych używa niestandardowej bazy danych z członkostwem .net połączonym z moją bazą danych. Tak więc w moim pliku konfiguracyjnym musiałem określić ManagerProvider i roleProvider.
ten sposób mój testów jednostkowych wygląda
[Test]
public void TestVerifyUser()
{
AuthenticateUser authenitcate = new AuthenticateUser();
bool vaild = authenitcate.VerifyUser("chobo3", "1234567");
Assert.That(vaild, Is.True);
}
także później mam w jednym z mojego ASP.NET MVC ActionResult Metody (the Zaloguj się aby być dokładne) mam to:
FormsAuthentication.RedirectFromLoginPage (loginValidation.UserName, rememberMe);
Więc jak mogę napisać test jednostkowy, który zrobiłby to, co zrobiłby użytkownik. Załóżmy, że zaczynają od strony głównej, a następnie klikną stronę logowania i pomyślnie się zalogują. Chcę, aby przekierowano ich na stronę główną.
Nie jestem pewien, jak to przedstawić w kodzie. Jestem całkiem pewien, że RedirectFromLoginPage
działa i to jest to, co naprawdę testuję. Testuję fakt, że mam 3 rzeczy, które mogą się zdarzyć w metodzie logowania ActionResult
.
- Użytkownik loguje się i odsyła, skąd przyszedł.
- Użytkownik nie loguje się i zostaje odesłany do
LoginView
i wyświetla komunikaty o błędach. - Użytkownik próbował przejść do bezpiecznego i został przekierowany do strony logowania. Jeśli logowanie powiodło się, nastąpi przekierowanie z powrotem do bezpiecznej strony za pomocą ReturnUrl.
Więc chcę zrobić test, aby sprawdzić, czy te działają tak, jak powinny. Dlatego właśnie potrzebuję mieć takiego użytkownika, jak na stronie głównej, aby sprawdzić, czy później zostanie on z powrotem przekierowany, a jeśli pochodzą z bezpiecznej strony, przekierowują się do niej później.
Jestem również przy okazji, używając NUnit 2.5 i VS2008 Pro.
To właśnie próbuję przetestować. Jestem w części, w której próbuję sprawdzić, czy użytkownik jest ważny, czy nie (instrukcja if). Nie mam pojęcia, jak to przetestować.
public ActionResult Login(string returnUrl, FormCollection form, bool rememberMe)
{
LoginValidation loginValidation = new LoginValidation();
try
{
UpdateModel(loginValidation, form.ToValueProvider());
}
catch
{
return View("Login");
}
if (ModelState.IsValid == true)
{
bool valid = authenticate.VerifyUser(loginValidation.UserName, loginValidation.Password);
if (valid == false)
{
ModelState.AddModelError("frm_Login", "Either the Password or UserName is invalid");
}
else if (string.IsNullOrEmpty(returnUrl) == false)
{
/* if the user has been sent away from a page that requires them to login and they do
* login then redirect them back to this area*/
return Redirect(returnUrl);
}
else
{
FormsAuthentication.RedirectFromLoginPage(loginValidation.UserName, rememberMe);
}
}
return View("Login");
}
Niestety ja nie rozumiem „Konwencja nad podejściem Konfiguracja” Czytałem o wyśmianie w książka, którą mam.Czy ma coś wspólnego z używaniem interfejsów lub czegoś w tym stylu? Znalazłem ten link, ale myślę, że to nie zadziała, odkąd używam Nunit i on używa MbUnit? http://aspalliance.com/1590 – chobo2
@ chobo2 Powiem coś o tym, jak z niego korzystać. Szokujące ramy zdecydowanie mają skłonność do używania interfejsów i nie bez powodu. Korzystanie z interfejsów zapewnia dobre oddzielenie. Jednak nie musisz używać interfejsów we wszystkich szyderczych frameworkach. Ponadto NUnit i MbUnit są podobne pod wieloma względami, więc coś, co jest zrobione w MbUnit, najprawdopodobniej ma parryllela do NUnit. Warto trochę zbadać. – Joseph
OK Dzięki. Wciąż nie rozumiem interfejsów i naprawdę nie mam z nimi pojęcia, jeśli chodzi o testowanie jednostkowe. Mam więc nadzieję, że jedna z tych struktur sprawi, że będzie trochę łatwiej. Którego polecasz? Widzę, że "Moq" używa linq sytanx, więc nie jestem pewien, czy prawo tego nietoperza, jeśli to będzie dobre dla mnie, ponieważ nie wiem zbyt wiele o linq. Również, w jaki sposób te frameworki działają z nunit? Czy nadal używam nunit, aby uruchomić mój test lub co? – chobo2