Я пишу приложение, которое позволяет пользователям «входить в систему», регистрируясь с тем же адресом электронной почты.(Не беспокойтесь, это не приложение, которое будет работать в Интернете, а также не будет хранить критические данные. Это временная регистрация и будет выполняться только в локальных сетях.) Предполагается, что метод MVC возвращает ключ API инекоторые другие данные после успешного входа в систему. Я создал модульный тест для проверки этого поведения:
[Fact]
public void Register_ExistingEmail()
{
//Arrange
DbContext context = new DbContext(InMemoryDbContextOptionsExtensions.UseInMemoryDatabase(new DbContextOptionsBuilder<DbContext>(), "VoteInMemDb").Options);
context.Users.Add(new User { ApiToken = "TestToken123", Email = "commonname@commondomain.com", JsonData = "{}" });
context.SaveChanges();
//logger, hub and settings are being mocked using Moq and are set up in the constructor
RegistrationController regCon = new RegistrationController(logger, context, hub, settings);
//Act
IActionResult result = regCon.Register("commonname@commondomain.com", "{}", false);
//Assert
try
{
//attempt to cast to expected result type
JsonResult jsonResult = (JsonResult)result;
Assert.Equal(new
{
apiToken = "TestToken123",
currentScreen = ClientScreen.welcome.ToString(),
cookieDuration = settings.Value.ApiTokenDuration
}, jsonResult.Value);
}
catch (EqualException e)
{
throw e;
}
catch
{
Assert.True(false);
}
}
Теперь, даже если он успешно возвращает объект, как и ожидалось, он все равно выдает EqualException
:
Testname: project.unit_tests.UnitTest1.Register_ExistingEmail
FullName für Test: project.unit_tests.UnitTest1.Register_ExistingEmail
Testquelle: D:\Repositories\project.unit-tests\UnitTest1.cs : Zeile 77
Testergebnis: Fehler
Testdauer: 0:00:01.009
Ergebnis StackTrace: at project.unit_tests.UnitTest1.Register_ExistingEmail() in D:\Repositories\project.unit-tests\UnitTest1.cs:line 104
Ergebnis Meldung:
Assert.Equal() Failure
Expected: { apiToken = TestToken123, currentScreen = welcome, cookieDuration = 1440 } (<>f__AnonymousType0`3[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]])
Actual: { apiToken = TestToken123, currentScreen = welcome, cookieDuration = 1440 } (<>f__AnonymousType1`3[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]])
Я вижу, что это на 99% тот же объект, кроме части <>f__AnonymousTypeX`3
.Это потому, что я использую анонимный Types
для генерации JsonResults
?Нужно ли создавать модели для каждого анонима Type
Я возвращаюсь к юнит-тестированию метода?
Заранее спасибо