Entity Framework 6 Record and play use : Unit Testing ( part 2 of 5)
Part 1 : What is EF record and play : http://msprogrammer.serviciipeweb.ro/2014/11/29/entity-framework-6-record-and-play-1-of-5/
Part 2: EF Record and play use: Testing : http://msprogrammer.serviciipeweb.ro/2014/12/08/entity-framework-6-record-and-play-use-unit-testing-part-2-of-5/
Part 3: EF Record and play use: Make demo: http://msprogrammer.serviciipeweb.ro/2014/12/14/entity-framework-6-record-and-play-use-making-demos-part-3-of-5/
Part 4: EF Record and play use: Record user Sql when a bug occurs: http://msprogrammer.serviciipeweb.ro/2014/12/26/ef-record-and-play-use-recording-user-sql-when-a-bug-occurred-part-4-of-5/
Part 5: EF record and play: conclusions: http://msprogrammer.serviciipeweb.ro/2015/01/05/ef-record-and-play-conclusions/
Let’s suppose that we have a program that have Departments and Employees.
And we want to make sure that, when we add an employee, the department must exists.
We can ensure this from database ( by foreign key) but we can pro-actively search for the department and throw a more meaningful validation .
More, I like more validation than errors.
So, let’s suppose that in the Validation for the Employee we must check in the database for the IdDepartment to see if there is such a department.
How could we make a test for that runs without a database ?
With some trick: we first Record with a database – then we can Play the file – and we do not need anymore the database. The test is self contained.
Let’s see in action here
Database.SetInitializer<ContextForDatabase>(null); #region set record EF var record = new InterceptionRecordOrPlay(@"VerifyIValidatableWorks.zip", ModeInterception.Play); DbInterception.Add(record); #endregion var e= new Employee(); e.ValidateEmployee = true; e.IDDepartment = 60000; var err= e.Validate(null).ToArray(); Assert.IsNotNull(err); Assert.AreEqual(1, err.Length);
Source code is available at https://github.com/ignatandrei/EFRecordAndPlay/wiki/
There is also a NuGet package at https://www.nuget.org/packages/EFRecordAndPlay/