updated sample ex_041_004; readme should be renewed

EFCore3_Reforged
Marc CHEVALDONNE 6 years ago
parent dac5618d99
commit 35c719e7b4

@ -546,10 +546,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_LISEZ-MOI_ !!", "_LISEZ-MO
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_001_ConnectionStrings", "p08_BDD_EntityFramework\ex_041_001_ConnectionStrings\ex_041_001_ConnectionStrings.csproj", "{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_001_ConnectionStrings", "p08_BDD_EntityFramework\ex_041_001_ConnectionStrings\ex_041_001_ConnectionStrings.csproj", "{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_004_UnitTests", "p08_BDD_EntityFramework\ex_041_004_UnitTests\ex_041_004_UnitTests.csproj", "{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_004_TestingInMemory", "p08_BDD_EntityFramework\ex_041_004_TestingInMemory\ex_041_004_TestingInMemory.csproj", "{166633F1-D1B3-4038-B015-B238A14C97C3}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_004_TestingInMemory", "p08_BDD_EntityFramework\ex_041_004_TestingInMemory\ex_041_004_TestingInMemory.csproj", "{166633F1-D1B3-4038-B015-B238A14C97C3}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_004_UnitTests_w_InMemory", "p08_BDD_EntityFramework\ex_041_004_UnitTests_w_InMemory\ex_041_004_UnitTests_w_InMemory.csproj", "{8C4BC92E-2E7D-4447-805F-0BCAF986022E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_041_004_ConsoleTests_w_SqlServer", "p08_BDD_EntityFramework\ex_041_004_ConsoleTests_w_SqlServer\ex_041_004_ConsoleTests_w_SqlServer.csproj", "{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_041_004_UnitTests_w_SQLiteInMemory", "p08_BDD_EntityFramework\ex_041_004_UnitTests_w_SQLiteInMemory\ex_041_004_UnitTests_w_SQLiteInMemory.csproj", "{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -4526,26 +4530,6 @@ Global
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x64.Build.0 = Release|Any CPU {097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x64.Build.0 = Release|Any CPU
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.ActiveCfg = Release|Any CPU {097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.ActiveCfg = Release|Any CPU
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.Build.0 = Release|Any CPU {097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM64.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x64.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x64.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x86.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x86.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|Any CPU.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM64.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM64.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x64.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x64.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x86.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x86.Build.0 = Release|Any CPU
{166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|ARM.ActiveCfg = Debug|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -4566,6 +4550,66 @@ Global
{166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x64.Build.0 = Release|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x64.Build.0 = Release|Any CPU
{166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x86.ActiveCfg = Release|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x86.ActiveCfg = Release|Any CPU
{166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x86.Build.0 = Release|Any CPU {166633F1-D1B3-4038-B015-B238A14C97C3}.Release|x86.Build.0 = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|ARM.Build.0 = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|ARM64.Build.0 = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|x64.ActiveCfg = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|x64.Build.0 = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|x86.ActiveCfg = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Debug|x86.Build.0 = Debug|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|Any CPU.Build.0 = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|ARM.ActiveCfg = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|ARM.Build.0 = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|ARM64.ActiveCfg = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|ARM64.Build.0 = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|x64.ActiveCfg = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|x64.Build.0 = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|x86.ActiveCfg = Release|Any CPU
{8C4BC92E-2E7D-4447-805F-0BCAF986022E}.Release|x86.Build.0 = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|ARM.Build.0 = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|ARM64.Build.0 = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|x64.ActiveCfg = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|x64.Build.0 = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|x86.ActiveCfg = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Debug|x86.Build.0 = Debug|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|Any CPU.Build.0 = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|ARM.ActiveCfg = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|ARM.Build.0 = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|ARM64.ActiveCfg = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|ARM64.Build.0 = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|x64.ActiveCfg = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|x64.Build.0 = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|x86.ActiveCfg = Release|Any CPU
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C}.Release|x86.Build.0 = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|ARM.Build.0 = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|ARM64.Build.0 = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|x64.ActiveCfg = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|x64.Build.0 = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|x86.ActiveCfg = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Debug|x86.Build.0 = Debug|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|Any CPU.Build.0 = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|ARM.ActiveCfg = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|ARM.Build.0 = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|ARM64.ActiveCfg = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|ARM64.Build.0 = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|x64.ActiveCfg = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|x64.Build.0 = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|x86.ActiveCfg = Release|Any CPU
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -4824,8 +4868,10 @@ Global
{56C5A51B-16E9-4F93-9C32-8F91710391E8} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA} {56C5A51B-16E9-4F93-9C32-8F91710391E8} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA}
{AB06CC3B-6D82-48D1-89FC-14C96C77FE7F} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA} {AB06CC3B-6D82-48D1-89FC-14C96C77FE7F} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA}
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C} = {56C5A51B-16E9-4F93-9C32-8F91710391E8} {097B0926-6663-4B7E-BBBE-DAA7EE278C7C} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{166633F1-D1B3-4038-B015-B238A14C97C3} = {56C5A51B-16E9-4F93-9C32-8F91710391E8} {166633F1-D1B3-4038-B015-B238A14C97C3} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{8C4BC92E-2E7D-4447-805F-0BCAF986022E} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{4AE5E57F-2D9B-40BD-B1C3-B39AE756172C} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{2BE75812-1DC2-4E9A-8D99-99456F11AB0D} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E} SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E}

@ -1,6 +1,7 @@
using System; using System;
using ex_041_004_TestingInMemory;
namespace ex_041_004_TestingInMemory namespace ex_041_004_ConsoleTests_w_SqlServer
{ {
class Program class Program
{ {

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ex_041_004_TestingInMemory\ex_041_004_TestingInMemory.csproj" />
</ItemGroup>
</Project>

@ -1,17 +1,21 @@
# ex_041_004_InMemory # ex_041_004_TestingInMemory
*31/12/2019 &sdot; Marc Chevaldonné* *01/01/2020 &sdot; Marc Chevaldonné*
--- ---
Le fournisseur **InMemory** est utilisé pour tester des bases de données sans avoir à créer réellement une base de données. Lorsqu'on cherche à tester notre code et nos accès à la base de données, on n'a pas nécessairement envie de créer la base juste pour les tests.
Ceci permet de tester les accès à votre "base" de manière toutefois approximative. Pour cela, il existe des solutions et des fournisseurs permettant de tester les bases sans avoir à réellement les créer :
En effet, **InMemory** n'est pas une base de données relationnelle : il y a donc des limitations. * le fournisseur **InMemory** permet ceci mais de manière approximative, car **InMemory** n'est pas une base de données relationnelle : il y a donc des limitations.
Cet exemple montre comment utiliser **InMemory** à travers une injection de dépendance. En d'autres termes, vous continuez à définir votre chaîne de connexion sur une base de données, mais vous permettez néanmoins l'utilisation, à la demande, de **InMemory** pour des tests. * **SQLite** possède un mode *In-Memory* qui lui, permet de tester une base de données relationnelle, sans avoir à créer une base de données.
Puisque ce fournisseur devient intéressant dans le cas de tests, j'ai donc ajouté un 2ème projet lié à cet exemple, permettant d'avoir accès à des tests unitaires utilisant **InMemory**.
Pour le reste de l'exemple, celui-ci n'apporte rien de nouveau par rapport à l'exemple ex_041_001. Cet exemple montre comment utiliser **InMemory** et **SQLite in-memory** à travers une injection de dépendance. En d'autres termes, vous continuez à définir votre chaîne de connexion sur une base de données, mais vous permettez néanmoins l'utilisation, à la demande, de **InMemory** pour des tests.
Puisque ce fournisseur devient intéressant dans le cas de tests, j'ai donc ajouté un 2ème projet lié à cet exemple, permettant d'avoir accès à des tests unitaires utilisant **InMemory** ou de **SQLite in-memory**.
Pour le reste de l'exemple, celui-ci n'apporte rien de nouveau par rapport à l'exemple ex_041_001 concernant l'utilisation d'**Entity Framework Core**.
--- ---
## Pourquoi autant de projets dans cet exemple ?
## Comment a été construit cet exemple ? ## Comment a été construit cet exemple ?
Cet exemple est tout d'abord construit de la même manière que l'exemple *ex_041_001_ConnectionStrings*. Cet exemple est tout d'abord construit de la même manière que l'exemple *ex_041_001_ConnectionStrings*.
Il ne faut pas oublier les NuGet nécessaires : Il ne faut pas oublier les NuGet nécessaires :

@ -1,8 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />

@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore;
using System.Linq; using System.Linq;
using Xunit; using Xunit;
namespace ex_041_004_UnitTests namespace ex_041_004_UnitTests_w_InMemory
{ {
public class NounoursDB_Tests public class NounoursDB_Tests
{ {
@ -14,7 +14,7 @@ namespace ex_041_004_UnitTests
.UseInMemoryDatabase(databaseName: "Add_Test_database") .UseInMemoryDatabase(databaseName: "Add_Test_database")
.Options; .Options;
// Run the test against one instance of the context //prepares the database with one instance of the context
using (var context = new NounoursContext(options)) using (var context = new NounoursContext(options))
{ {
Nounours chewie = new Nounours { Nom = "Chewbacca" }; Nounours chewie = new Nounours { Nom = "Chewbacca" };
@ -27,7 +27,7 @@ namespace ex_041_004_UnitTests
context.SaveChanges(); context.SaveChanges();
} }
// Use a separate instance of the context to verify correct data was saved to database //prepares the database with one instance of the context
using (var context = new NounoursContext(options)) using (var context = new NounoursContext(options))
{ {
Assert.Equal(3, context.Nounours.Count()); Assert.Equal(3, context.Nounours.Count());
@ -42,7 +42,7 @@ namespace ex_041_004_UnitTests
.UseInMemoryDatabase(databaseName: "Modify_Test_database") .UseInMemoryDatabase(databaseName: "Modify_Test_database")
.Options; .Options;
// Run the test against one instance of the context //prepares the database with one instance of the context
using (var context = new NounoursContext(options)) using (var context = new NounoursContext(options))
{ {
Nounours chewie = new Nounours { Nom = "Chewbacca" }; Nounours chewie = new Nounours { Nom = "Chewbacca" };
@ -55,25 +55,25 @@ namespace ex_041_004_UnitTests
context.SaveChanges(); context.SaveChanges();
} }
// Use a separate instance of the context to verify correct data was saved to database //prepares the database with one instance of the context
using (var context = new NounoursContext(options)) using (var context = new NounoursContext(options))
{ {
string nameToFind = "ew"; string nameToFind = "ew";
Assert.Equal(2, context.Nounours.Where(n => n.Nom.Contains(nameToFind, System.StringComparison.CurrentCultureIgnoreCase)).Count()); Assert.Equal(2, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
nameToFind = "ewo"; nameToFind = "ewo";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.Contains(nameToFind, System.StringComparison.CurrentCultureIgnoreCase)).Count()); Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
var ewok = context.Nounours.Where(n => n.Nom.Contains(nameToFind, System.StringComparison.CurrentCultureIgnoreCase)).First(); var ewok = context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).First();
ewok.Nom = "Wicket"; ewok.Nom = "Wicket";
context.SaveChanges(); context.SaveChanges();
} }
// Use a separate instance of the context to verify correct data was saved to database //prepares the database with one instance of the context
using (var context = new NounoursContext(options)) using (var context = new NounoursContext(options))
{ {
string nameToFind = "ew"; string nameToFind = "ew";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.Contains(nameToFind, System.StringComparison.CurrentCultureIgnoreCase)).Count()); Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
nameToFind = "wick"; nameToFind = "wick";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.Contains(nameToFind, System.StringComparison.CurrentCultureIgnoreCase)).Count()); Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
} }
} }
} }

@ -0,0 +1,102 @@
using ex_041_004_TestingInMemory;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using Xunit;
using Microsoft.Data.Sqlite;
namespace ex_041_004_UnitTests_w_SQLiteInMemory
{
public class NounoursDB_Tests
{
[Fact]
public void Add_Test()
{
//connection must be opened to use In-memory database
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<NounoursContext>()
.UseSqlite(connection)
.Options;
//prepares the database with one instance of the context
using (var context = new NounoursContext(options))
{
//context.Database.OpenConnection();
context.Database.EnsureCreated();
Nounours chewie = new Nounours { Nom = "Chewbacca" };
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
context.Nounours.Add(chewie);
context.Nounours.Add(yoda);
context.Nounours.Add(ewok);
context.SaveChanges();
}
//uses another instance of the context to do the tests
using (var context = new NounoursContext(options))
{
context.Database.EnsureCreated();
Assert.Equal(3, context.Nounours.Count());
Assert.Equal("Chewbacca", context.Nounours.First().Nom);
}
}
[Fact]
public void Modify_Test()
{
//connection must be opened to use In-memory database
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<NounoursContext>()
.UseSqlite(connection)
.Options;
//prepares the database with one instance of the context
using (var context = new NounoursContext(options))
{
//context.Database.OpenConnection();
context.Database.EnsureCreated();
Nounours chewie = new Nounours { Nom = "Chewbacca" };
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
context.Nounours.Add(chewie);
context.Nounours.Add(yoda);
context.Nounours.Add(ewok);
context.SaveChanges();
}
//uses another instance of the context to do the tests
using (var context = new NounoursContext(options))
{
context.Database.EnsureCreated();
string nameToFind = "ew";
Assert.Equal(2, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
nameToFind = "wo";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
var ewok = context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).First();
ewok.Nom = "Wicket";
context.SaveChanges();
}
//uses another instance of the context to do the tests
using (var context = new NounoursContext(options))
{
context.Database.EnsureCreated();
string nameToFind = "ew";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
nameToFind = "wick";
Assert.Equal(1, context.Nounours.Where(n => n.Nom.ToLower().Contains(nameToFind)).Count());
}
}
}
}

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ex_041_004_TestingInMemory\ex_041_004_TestingInMemory.csproj" />
</ItemGroup>
</Project>
Loading…
Cancel
Save