Skip to content

Instantly share code, notes, and snippets.

@dgwaldo
Last active November 4, 2017 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dgwaldo/42a1c53ab31ef160f2daef2994f20439 to your computer and use it in GitHub Desktop.
Save dgwaldo/42a1c53ab31ef160f2daef2994f20439 to your computer and use it in GitHub Desktop.
Test setup for EF Core using InMemoryDb
[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