Я пишу свои собственные тесты для макета структуры сущностей на ядре .NET, однако у меня возникли некоторые проблемы, так как некоторые запросы LINQ работают нормально, а другие выдают не реализованное исключение.Это базовый справочник запросов, который я использовал:
https://docs.microsoft.com/en-us/ef/core/querying/basic
Вот пример проблемы с двумя тестами.Первый использует запрос ToList () для загрузки всех данных и проверяет первый и единственный объект.Это работает, но не идеально.Второй тест пытается захватить конкретный объект, используя его идентификатор, следуя инструкциям руководства «Загрузка одного объекта».Однако это вызывает исключение.
[TestMethod]
public void Test_AddBook()
{
// Arrange
var context = new TestContext();
var service = new BookStore(context);
// Act
service.AddBook(1, "Wuthering Heights", "Emily Brontë", "Classics", 7.99, 5);
//Assert
var books = context.Books.ToList();
Assert.AreEqual(books[0].Title, "Wuthering Heights");
}
[TestMethod]
public void Test_AddBook2()
{
// Arrange
var context = new TestContext();
var service = new BookStore(context);
// Act
service.AddBook(1, "Wuthering Heights", "Emily Brontë", "Classics", 7.99, 5);
//Assert
var book = context.Books.Single(b => b.Id == 1);
Assert.AreEqual(book.Title, "Wuthering Heights");
}
Отладчик показывает идентификатор книги в контексте: 1:
И код для TestContext:
class TestContext : IBookContext
{
public TestContext()
{
this.Books = new TestDbSet<Book>();
}
public DbSet<Book> Books { get; set; }
public int SaveChangesCount { get; private set; }
public int SaveChanges()
{
this.SaveChangesCount++;
return 1;
}
}
Это учебник, которому я следовал, с некоторыми изменениями, чтобы адаптировать его для .NET Core:
https://docs.microsoft.com/en-us/ef/ef6/fundamentals/testing/writing-test-doubles