Кто-нибудь еще разочарован встроенной структурой модульного тестирования ASP.NET? Проблема, с которой я сталкиваюсь, - это подключение и тестирование на провайдере членства для ASP.NET в приложении MVC3. Похоже, что соединение с базой данных не было установлено или существует другой набор правил, чем при нормальном запуске приложения. Вот два сценария.
1) Попытка найти существующего пользователя по имени:
Модульный тест -
[TestMethod]
public void RegisterTest()
{
AccountController target = new AccountController();
RegisterModel model = new RegisterModel() { UserName = "existinguser", Email = "email@test.com", Password = "Password", ConfirmPassword = "Password" };
actual = target.Register(model);
}
Блок кода из AccountController -
MembershipCreateStatus createStatus;
MembershipUserCollection members = Membership.FindUsersByName(model.UserName);
MembershipUser user = null;
if (members.Count > 0)
createStatus = MembershipCreateStatus.DuplicateUserName;
Результат -
Когда я вхожу в этот код, массив members пуст, хотя я знаю, что этот пользователь находится в системе. Есть ли какая-нибудь хитрость для установления соединения с хранилищем членства в приложении модульного тестирования? Я попытался использовать атрибут источника данных, но безуспешно.
2) Попытка создать новую учетную запись:
Модульный тест такой же, как и выше, однако я передаю нового пользователя, которого еще нет в системе. Когда я вхожу в контроллер и перехожу к следующей строке, он дает мне membersCreateStatus 'InvalidQuestion'. Это кажется странным, так как при запуске вживую у меня нет этой проблемы, и я могу создавать учетные записи с такой линией, как она.
user = Membership.CreateUser(model.UserName, model.Password, model.Email, string.Empty, string.Empty, true, null, out createStatus);
Заранее спасибо за помощь. Я действительно пытаюсь сделать этот тест первым методом, но он усложняет использование встроенной среды тестирования. Конечно, есть способ подключиться к БД для всех модульных тестов (не предоставляя подключения для каждого теста) и имитировать те же действия, что и в браузере.