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/