, , Linq. , - (IRepository <GameFile> ), . , , .
ServiceLayer, .
public class ServiceLayer
{
private readonly IRepository<GameFile> _gameRepository;
public SerivceLayer(IRepository<GameFile> repository)
{
_gameRepository = repository;
}
public IEnumerable<GameFile> FindAllActiveGamesFiles()
{
return _gameRepository
.Find()
.Where( gameFile => gameFile.IsActive)
.ToList();
}
}
.... (NUnit Moq)
[TestFixture]
public class ServiceLayerFixture
{
protected IRepository<GameFile> Repository;
protected ServiceLayer Subject;
protected ICollection<GameFile> Results;
[Setup]
public void Setup()
{
Repository = new Mock<IRepository<GameFile>>().Object;
Subject = new ServiceLayer(Repository);
}
[Test]
public void WhenRepositoryDoesNotContainItems_ServiceLayer_ReturnsAnEmptyCollection()
{
Mock.Get(Repository)
.Setup( r => r.Find())
.Returns( new List<GameFile>().AsQueryable() );
Results = Subject.FindAllActiveGameFiles();
Assert.AreEqual(0, Results.Count);
}
[Test]
public void WhenRepositoryDoesNotContainActiveItems_ServiceLayer_ReturnsAnEmptyCollection()
{
Mock.Get(Repository)
.Setup( r => r.Find())
.Returns(
new List<GameFile>()
{
new GameFile { IsActive = false },
new GameFile { IsActive = false }
}.AsQueryable() );
Results = Subject.FindAllActiveGameFiles();
Assert.AreEqual(0, Results.Count);
}
[Test]
public void WhenRepositoryContainActiveItems_ServiceLayer_FiltersItemsAppropriately()
{
Mock.Get(Repository)
.Setup( r => r.Find())
.Returns(
new List<GameFile>()
{
new GameFile { IsActive = true },
new GameFile { IsActive = false }
}.AsQueryable() );
Results = Subject.FindAllActiveGameFiles();
Assert.AreEqual(1, Results.Count);
}
}
IRepository.
, :
[Test]
public void WhenTheRepositoryFails_ServiceLayer_ShouldHandleExceptionsGracefully()
{
Mock.Get(Repository)
.Setup( r => r.Find())
.Throws( new InvalidOperationException() );
Results = Subject.FindAllActiveGameFiles();
Assert.AreEqual(0, Results.Count);
}
, , ?
[Test]
[ExpectedException(typeof(GameFileNotFoundException))]
public void WhenTheRepositoryFails_ServiceLayer_ShouldReportCustomError()
{
Mock.Get(Repository)
.Setup( r => r.Find())
.Throws( new InvalidOperationException() );
Subject.FindAllActiveGameFiles();
}