Skip to content

Commit

Permalink
Added DbQuery sample, updated package version and README
Browse files Browse the repository at this point in the history
  • Loading branch information
Roman Titov committed Feb 28, 2019
1 parent 0add4e7 commit c4cfbfa
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 14 deletions.
14 changes: 14 additions & 0 deletions README.md
Expand Up @@ -57,6 +57,20 @@ var userRepository = new TestDbSetRepository(mock.Object);
//3 - setup DbSet for NSubstitute
var userRepository = new TestDbSetRepository(mock);
```

Do you use *DbQuery*?

```csharp
//2 - build mock by extension
var mock = users.AsQueryable().BuildMockDbQuery();

//3 - setup the mock as Queryable for Moq
_userRepository.Setup(x => x.GetQueryable()).Returns(mock.Object);

//3 - setup the mock as Queryable for NSubstitute
_userRepository.GetQueryable().Returns(mock);
```

Check out the [sample project](https://github.com/romantitov/MockQueryable/tree/master/src/MockQueryable/MockQueryable.Sample)

### Where can I get it?
Expand Down
7 changes: 3 additions & 4 deletions src/MockQueryable/MockQueryable.Moq/MockQueryable.Moq.csproj
Expand Up @@ -4,17 +4,16 @@
<TargetFramework>netstandard2.0</TargetFramework>
<Authors>Roman Titov</Authors>
<Company>CactusSoft</Company>
<Version>1.1.0</Version>
<Description>Extension for mocking Entity Framework Core operations such ToListAsync, FirstOrDefaultAsync etc. by Moq
When writing tests for your application it is often desirable to avoid hitting the database. The extension allows you to achieve this by creating a context – with behavior defined by your tests – that makes use of in-memory data.</Description>
<PackageProjectUrl>https://github.com/romantitov/MockQueryable</PackageProjectUrl>
<RepositoryUrl>https://github.com/romantitov/MockQueryable</RepositoryUrl>
<PackageTags>Moq EntityFrameworkCore Queryable mock EF UnitTests</PackageTags>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>MockQueryable.Moq</PackageId>
<PackageVersion>1.0.4</PackageVersion>
<Version>1.0.4</Version>
<AssemblyVersion>1.0.4.0</AssemblyVersion>
<FileVersion>1.0.4.0</FileVersion>
<AssemblyVersion>1.1.0.0</AssemblyVersion>
<FileVersion>1.1.0.0</FileVersion>
<PackageReleaseNotes>AutoMapper support</PackageReleaseNotes>
</PropertyGroup>

Expand Down
@@ -1,16 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>1.0.4</Version>
<Authors>Roman Titov</Authors>
<Company>CactusSoft</Company>
<Version>1.1.0</Version>
<Description>Extension for mocking Entity Framework Core operations such ToListAsync, FirstOrDefaultAsync etc. by NSubstitute
When writing tests for your application it is often desirable to avoid hitting the database. The extension allows you to achieve this by creating a context – with behavior defined by your tests – that makes use of in-memory data.</Description>
<PackageProjectUrl>https://github.com/romantitov/MockQueryable</PackageProjectUrl>
<RepositoryUrl>https://github.com/romantitov/MockQueryable</RepositoryUrl>
<PackageTags>NSubstitute EntityFrameworkCore Queryable mock EF UnitTests</PackageTags>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<AssemblyVersion>1.0.4.0</AssemblyVersion>
<FileVersion>1.0.4.0</FileVersion>
<AssemblyVersion>1.1.0.0</AssemblyVersion>
<FileVersion>1.1.0.0</FileVersion>
<PackageReleaseNotes>AutoMapper support</PackageReleaseNotes>
</PropertyGroup>

Expand Down
29 changes: 28 additions & 1 deletion src/MockQueryable/MockQueryable.Sample/MyServiceMoqTests.cs
Expand Up @@ -70,8 +70,35 @@ public async Task GetUserReports(DateTime from, DateTime to, int expectedCount)

}


[TestCase("01/20/2012", "06/20/2018", 5)]
[TestCase("01/20/2012", "06/20/2012", 4)]
[TestCase("01/20/2012", "02/20/2012", 3)]
[TestCase("01/20/2010", "02/20/2011", 0)]
public async Task GetUserReports_DbQuery(DateTime from, DateTime to, int expectedCount)
{
//arrange
var userRepository = new Mock<IUserRepository>();
var service = new MyService(userRepository.Object);
var users = new List<UserEntity>
{
new UserEntity{FirstName = "FirstName1", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName2", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName3", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName3", LastName = "LastName", DateOfBirth = DateTime.Parse("03/20/2012")},
new UserEntity{FirstName = "FirstName5", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2018")},
};
//expect
var mock = users.AsQueryable().BuildMockDbQuery();
userRepository.Setup(x => x.GetQueryable()).Returns(mock.Object);
//act
var result = await service.GetUserReports(from, to);
//assert
Assert.AreEqual(expectedCount, result.Count);

}


[TestCase("01/20/2012", "06/20/2018", 5)]
[TestCase("01/20/2012", "06/20/2012", 4)]
[TestCase("01/20/2012", "02/20/2012", 3)]
[TestCase("01/20/2010", "02/20/2011", 0)]
Expand Down
Expand Up @@ -64,6 +64,32 @@ public async Task GetUserReports(DateTime from, DateTime to, int expectedCount)
Assert.AreEqual(expectedCount, result.Count);
}

[TestCase("01/20/2012", "06/20/2018", 5)]
[TestCase("01/20/2012", "06/20/2012", 4)]
[TestCase("01/20/2012", "02/20/2012", 3)]
[TestCase("01/20/2010", "02/20/2011", 0)]
public async Task GetUserReports_DbQuery(DateTime from, DateTime to, int expectedCount)
{
//arrange
var userRepository = Substitute.For<IUserRepository>();
var service = new MyService(userRepository);
var users = new List<UserEntity>
{
new UserEntity{FirstName = "FirstName1", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName2", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName3", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2012")},
new UserEntity{FirstName = "FirstName3", LastName = "LastName", DateOfBirth = DateTime.Parse("03/20/2012")},
new UserEntity{FirstName = "FirstName5", LastName = "LastName", DateOfBirth = DateTime.Parse("01/20/2018")},
};
//expect
var mock = users.AsQueryable().BuildMockDbQuery();
userRepository.GetQueryable().Returns(mock);
//act
var result = await service.GetUserReports(from, to);
//assert
Assert.AreEqual(expectedCount, result.Count);
}


[TestCase("AnyFirstName", "AnyExistLastName", "01/20/2012", "Users with DateOfBirth more than limit")]
[TestCase("ExistFirstName", "AnyExistLastName", "02/20/2012", "User with FirstName already exist")]
Expand Down
9 changes: 4 additions & 5 deletions src/MockQueryable/MockQueryable/MockQueryable.csproj
@@ -1,9 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>MockQueryable.Core</PackageId>
<PackageVersion>1.0.4</PackageVersion>
<Authors>Roman Titov</Authors>
<Description>Async operations with generic collections, to provide for collections such List&lt;T&gt; execute EntityFrameworkCore operations such ToListAsync, FirstOrDefaultAsync etc.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand All @@ -12,9 +11,9 @@
<PackageProjectUrl>https://github.com/romantitov/MockQueryable</PackageProjectUrl>
<RepositoryUrl>https://github.com/romantitov/MockQueryable</RepositoryUrl>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.4</Version>
<AssemblyVersion>1.0.4.0</AssemblyVersion>
<FileVersion>1.0.4.0</FileVersion>
<Version>1.1.0</Version>
<AssemblyVersion>1.1.0.0</AssemblyVersion>
<FileVersion>1.1.0.0</FileVersion>
<Company>CactusSoft</Company>
</PropertyGroup>

Expand Down

0 comments on commit c4cfbfa

Please sign in to comment.