Last active
November 4, 2017 09:00
-
-
Save dgwaldo/42a1c53ab31ef160f2daef2994f20439 to your computer and use it in GitHub Desktop.
Test setup for EF Core using InMemoryDb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestClass] | |
public class ExampleRepositoryTests { | |
[TestMethod] | |
public void Get_Overload_Should_Return_Paged_Contacts_Obj() { | |
//Arrange | |
var options = GetOptions(nameof(this.Get_Overload_Should_Return_Paged_Contacts_Obj)); | |
using (var context = new ContactSheetsDbContext(options)) { | |
LoadContactsIntoDb(context); | |
} | |
//Act | |
var result = GetRepo(options).Get(1, 3); | |
//Assert | |
Assert.AreEqual(1, result.Page); | |
Assert.AreEqual(2, result.TotalPages); | |
Assert.AreEqual(3, result.PageSize); | |
Assert.AreEqual(4, result.TotalItems); | |
Assert.IsInstanceOfType(result, typeof(PagedData<Contact>)); | |
} | |
[TestMethod] | |
public void Update_Should_Update_Entity_And_Child_Collections_In_Db() { | |
//Arrange | |
var options = GetOptions(nameof(this.Update_Should_Update_Entity_And_Child_Collections_In_Db)); | |
using (var context = new ContactSheetsDbContext(options)) { | |
LoadContactsIntoDb(context); | |
} | |
var entity = GetRepo(options).Get(1); | |
var address = entity.Addresses.First(); | |
var street = "Cherry Lane"; | |
address.Street1 = street; | |
var lastName = "White"; | |
//Act | |
entity.LastName = lastName; | |
GetRepo(options).Update(entity); | |
//Assert | |
using (var context = new ContactSheetsDbContext(options)) { | |
var result = context.Contacts.Include(a => a.Addresses).First(f => f.FirstName == "Bob"); | |
Assert.AreEqual(lastName, result.LastName); | |
Assert.AreEqual(street, result.Addresses.First().Street1); | |
} | |
} | |
private void LoadContactsIntoDb(ContactSheetsDbContext context) { | |
context.Contacts.Add(new Contact { | |
Id = 1, FirstName = "Bob", | |
Addresses = new List<Address> { new Address { Street1 = "Blah Lane", City = "Lake City" } }, | |
EmailAddresses = new List<EmailAddress> { new EmailAddress { Email = "bob@bobs.com" } }, | |
PhoneNumbers = new List<PhoneNumber> { new PhoneNumber { DialNumber = "+1 503-332-0002" } } | |
}); | |
context.Contacts.Add(new Contact { | |
Id = 2, FirstName = "Sally", | |
Addresses = new List<Address> { new Address { Street1 = "ZZ Lane", City = "City of One" } }, | |
EmailAddresses = new List<EmailAddress> { new EmailAddress { Email = "sally@bobs.com" } }, | |
PhoneNumbers = new List<PhoneNumber> { new PhoneNumber { DialNumber = "+1 503-932-1202" } } | |
}); | |
context.Contacts.Add(new Contact { Id = 3, FirstName = "Sue" }); | |
context.Contacts.Add(new Contact { Id = 4, FirstName = "Gary" }); | |
context.SaveChanges(); | |
} | |
private DbContextOptions<ContactSheetsDbContext> GetOptions(string dbName) { | |
return new DbContextOptionsBuilder<ContactSheetsDbContext>() | |
.UseInMemoryDatabase(databaseName: dbName) | |
.Options; | |
} | |
private ContactsRepository GetRepo(DbContextOptions<ContactSheetsDbContext> options) { | |
return new ContactsRepository(new ContactSheetsDbContext(options)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment