I am having some issues in with the tests that I am writing for the
server side of my project.
I am trying to use Rhino Mocks for this. But I am having trouble in
implementing it properly.
Say I have some methods on my service application class that I need
Mock and be able to test.
The first method I need to test is,
public DocumentDto SaveDocument(DocumentDto documentDto)
{
Document document = null;
using (_documentRepository.DbContext.BeginTransaction())
{
try
{
if (documentDto.IsDirty)
{
if (documentDto.Id == 0)
{
document = CreateNewDocument(documentDto);
}
else if (documentDto.Id > 0)
{
document =
ChangeExistingDocument(documentDto);
}
document =
_documentRepository.SaveOrUpdate(document);
_documentRepository.DbContext.CommitChanges();
}
}
catch
{
_documentRepository.DbContext.RollbackTransaction();
throw;
}
}
return MapperFactory.GetDocumentDto(document);
}
public Document CreateNewDocument(DocumentDto documentDto)
{
if (documentDto.GetType() == typeof(NctsDepartureNoDto))
{
var nctsDepartureNoDto = documentDto as
NctsDepartureNoDto;
if (nctsDepartureNoDto != null)
{
var nctsDepartureNo = new
NctsDepartureNo(GetAccount(nctsDepartureNoDto.AccountId));
nctsDepartureNo.AuthorisedReceiverTin =
nctsDepartureNoDto.AuthorisedReceiverTin;
nctsDepartureNo.CountryOfDestination =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfDestination);
nctsDepartureNo.CountryOfDispatch =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfDispatch);
nctsDepartureNo.CountryOfMeansOfTransportAtDeparture =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfMeansOfTransportAtDeparture);
nctsDepartureNo.CountryOfMeansOfTransportCrossingTheBorder =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfMeansOfTransportCrossingTheBorder);
nctsDepartureNo.Consignor =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Consignor);
nctsDepartureNo.Consignee =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Consignee);
nctsDepartureNo.CustomsOfficeOfDeparture =
MapperFactory.GetCustomsOfficeCode(nctsDepartureNoDto.CustomsOfficeOfDeparture);
nctsDepartureNo.CustomsOfficeOfDestination =
MapperFactory.GetCustomsOfficeCode(nctsDepartureNoDto.CustomsOfficeOfDestination);
nctsDepartureNo.IdentityOfMeansOfTransportAtDepature =
nctsDepartureNoDto.IdentityOfMeansOfTransportAtDepature;
nctsDepartureNo.IdentityOfMeansOfTransportCrossingTheBorder =
nctsDepartureNoDto.IdentityOfMeansOfTransportCrossingTheBorder;
nctsDepartureNo.IsContainer =
nctsDepartureNoDto.IsContainer;
nctsDepartureNo.Items = nctsDepartureNoDto.Items;
nctsDepartureNo.LoadingLists =
nctsDepartureNoDto.LoadingLists;
nctsDepartureNo.LocationOfGoods =
nctsDepartureNoDto.LocationOfGoods;
nctsDepartureNo.Mrn = nctsDepartureNoDto.Mrn;
nctsDepartureNo.NumberOfSeals =
nctsDepartureNoDto.NumberOfSeals;
nctsDepartureNo.OtherIncidentsDuringCarriage =
nctsDepartureNoDto.OtherIncidentsDuringCarriage;
nctsDepartureNo.Principal =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Principal);
nctsDepartureNo.ReferenceNumber =
nctsDepartureNoDto.ReferenceNumber;
nctsDepartureNo.Regime =
MapperFactory.GetRegimeCode(nctsDepartureNoDto.Regime);
nctsDepartureNo.RepresentativeCapacity =
nctsDepartureNoDto.RepresentativeCapacity;
nctsDepartureNo.RepresentativeDeclarationPlace =
nctsDepartureNoDto.RepresentativeDeclarationPlace;
nctsDepartureNo.RepresentativeName =
nctsDepartureNoDto.RepresentativeName;
nctsDepartureNo.TotalGrossMass =
nctsDepartureNoDto.TotalGrossMass;
nctsDepartureNo.TotalPackages =
nctsDepartureNoDto.TotalPackages;
nctsDepartureNo.TransportModeOfMeansOfTransportAtBorder =
MapperFactory.GetTransportModeCode(nctsDepartureNoDto.TransportModeOfMeansOfTransportAtBorder);
nctsDepartureNo.TransportModeOfMeansOfTransportInland =
MapperFactory.GetTransportModeCode(nctsDepartureNoDto.TransportModeOfMeansOfTransportInland);
nctsDepartureNo.TransportTypeOfMeansOfTransportAtBorder =
MapperFactory.GetTransportTypeCode(nctsDepartureNoDto.TransportTypeOfMeansOfTransportAtBorder);
nctsDepartureNo.TransportTypeOfMeansOfTransportCrossingTheBorder =
MapperFactory.GetTransportTypeCode(
nctsDepartureNoDto.TransportTypeOfMeansOfTransportCrossingTheBorder);
foreach (GoodsPositionDto goodsPositionDto in
nctsDepartureNoDto.GoodsPositions)
{
var goodsPosition = new
GoodsPosition(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
goodsPosition.Position =
goodsPositionDto.Position;
goodsPosition.TarrifNumber =
goodsPositionDto.TariffNumber;
goodsPosition.Description =
goodsPositionDto.Description;
nctsDepartureNo.AddGoodsPositions(goodsPosition);
}
foreach (IdentityOfSealDto identityOfSealDto in
nctsDepartureNoDto.IdentitiesOfSeals)
{
var identityOfSeal = new
IdentityOfSeal(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
identityOfSeal.Identity =
identityOfSealDto.Identity;
nctsDepartureNo.AddIdentityOfSeals(identityOfSeal);
}
foreach (CustomsOfficeOfTransitDto
customsOfficeOfTransitDto in nctsDepartureNoDto.CustomsOffices)
{
var customsOfficeOfTransit = new
CustomsOfficeOfTransit(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
customsOfficeOfTransit.CustomsOffice =
MapperFactory.GetCustomsOfficeCode(customsOfficeOfTransitDto.CustomsOffice);
nctsDepartureNo.AddCustomsOfficesOfTransit(customsOfficeOfTransit);
}
foreach (DocumentGuaranteeDto documentGuaranteeDto
in nctsDepartureNoDto.Guarantees)
{
var documentGuarantee = new
DocumentGuarantee(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
documentGuarantee.Amount =
documentGuaranteeDto.Amount;
documentGuarantee.Type =
MapperFactory.GetGuaranteeTypeCode(documentGuaranteeDto.Type);
documentGuarantee.Guarantee =
_guaranteeRepository.Get(documentGuaranteeDto.GuaranteeId);
documentGuarantee.AccessCode =
MapperFactory.GetAccessCode(documentGuaranteeDto.AccessCode);
documentGuarantee.Document =
_documentRepository.Get(nctsDepartureNoDto.Id);
nctsDepartureNo.AddDocumentGuarantees(documentGuarantee);
}
return nctsDepartureNo;
}
}
return null;
}
public Document ChangeExistingDocument(DocumentDto
documentDto)
{
Document document =
_documentRepository.Get(documentDto.Id);
if (document != null)
{
if (documentDto.GetType() ==
typeof(NctsDepartureNoDto))
{
var nctsDepartureNoDto = (NctsDepartureNoDto)
documentDto;
var nctsDepartureNo = (NctsDepartureNo) document;
nctsDepartureNo.AuthorisedReceiverTin =
nctsDepartureNoDto.AuthorisedReceiverTin;
nctsDepartureNo.CountryOfDestination =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfDestination);
nctsDepartureNo.CountryOfDispatch =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfDispatch);
nctsDepartureNo.CountryOfMeansOfTransportAtDeparture =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfMeansOfTransportAtDeparture);
nctsDepartureNo.CountryOfMeansOfTransportCrossingTheBorder =
MapperFactory.GetCountryCode(nctsDepartureNoDto.CountryOfMeansOfTransportCrossingTheBorder);
nctsDepartureNo.Consignor =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Consignor);
nctsDepartureNo.Consignee =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Consignee);
nctsDepartureNo.CustomsOfficeOfDeparture =
MapperFactory.GetCustomsOfficeCode(nctsDepartureNoDto.CustomsOfficeOfDeparture);
nctsDepartureNo.CustomsOfficeOfDestination =
MapperFactory.GetCustomsOfficeCode(nctsDepartureNoDto.CustomsOfficeOfDestination);
nctsDepartureNo.IdentityOfMeansOfTransportAtDepature =
nctsDepartureNoDto.IdentityOfMeansOfTransportAtDepature;
nctsDepartureNo.IdentityOfMeansOfTransportCrossingTheBorder =
nctsDepartureNoDto.IdentityOfMeansOfTransportCrossingTheBorder;
nctsDepartureNo.IsContainer =
nctsDepartureNoDto.IsContainer;
nctsDepartureNo.Items = nctsDepartureNoDto.Items;
nctsDepartureNo.LoadingLists =
nctsDepartureNoDto.LoadingLists;
nctsDepartureNo.LocationOfGoods =
nctsDepartureNoDto.LocationOfGoods;
nctsDepartureNo.Mrn = nctsDepartureNoDto.Mrn;
nctsDepartureNo.NumberOfSeals =
nctsDepartureNoDto.NumberOfSeals;
nctsDepartureNo.OtherIncidentsDuringCarriage =
nctsDepartureNoDto.OtherIncidentsDuringCarriage;
nctsDepartureNo.Principal =
MapperFactory.GetSelectedActorForNctsDepartureNo(nctsDepartureNoDto.Principal);
nctsDepartureNo.ReferenceNumber =
nctsDepartureNoDto.ReferenceNumber;
nctsDepartureNo.Regime =
MapperFactory.GetRegimeCode(nctsDepartureNoDto.Regime);
nctsDepartureNo.RepresentativeCapacity =
nctsDepartureNoDto.RepresentativeCapacity;
nctsDepartureNo.RepresentativeDeclarationPlace =
nctsDepartureNoDto.RepresentativeDeclarationPlace;
nctsDepartureNo.RepresentativeName =
nctsDepartureNoDto.RepresentativeName;
nctsDepartureNo.TotalGrossMass =
nctsDepartureNoDto.TotalGrossMass;
nctsDepartureNo.TotalPackages =
nctsDepartureNoDto.TotalPackages;
nctsDepartureNo.TransportModeOfMeansOfTransportAtBorder =
MapperFactory.GetTransportModeCode(nctsDepartureNoDto.TransportModeOfMeansOfTransportAtBorder);
nctsDepartureNo.TransportModeOfMeansOfTransportInland =
MapperFactory.GetTransportModeCode(nctsDepartureNoDto.TransportModeOfMeansOfTransportInland);
nctsDepartureNo.TransportTypeOfMeansOfTransportAtBorder =
MapperFactory.GetTransportTypeCode(nctsDepartureNoDto.TransportTypeOfMeansOfTransportAtBorder);
nctsDepartureNo.TransportTypeOfMeansOfTransportCrossingTheBorder =
MapperFactory.GetTransportTypeCode(
nctsDepartureNoDto.TransportTypeOfMeansOfTransportCrossingTheBorder);
var goodsPoitions = new
List<GoodsPosition>(nctsDepartureNo.GoodsPositions);
foreach (GoodsPosition goodsPosition in
goodsPoitions)
{
nctsDepartureNo.GoodsPositions.Remove(goodsPosition);
_goodsPositionRepository.Delete(goodsPosition);
}
var seals = new
List<IdentityOfSeal>(nctsDepartureNo.IdentitiesOfSeals);
foreach (IdentityOfSeal identityOfSeal in seals)
{
nctsDepartureNo.IdentitiesOfSeals.Remove(identityOfSeal);
_identityOfSealRepository.Delete(identityOfSeal);
}
var customsOffices = new
List<CustomsOfficeOfTransit>(nctsDepartureNo.CustomsOffices);
foreach (CustomsOfficeOfTransit
customsOfficeOfTransit in customsOffices)
{
nctsDepartureNo.CustomsOffices.Remove(customsOfficeOfTransit);
_customsOfficeOfTransitRepository.Delete(customsOfficeOfTransit);
}
_goodsPositionRepository.DbContext.CommitChanges();
_identityOfSealRepository.DbContext.CommitChanges();
_customsOfficeOfTransitRepository.DbContext.CommitChanges();
foreach (GoodsPositionDto goodsPositionDto in
nctsDepartureNoDto.GoodsPositions)
{
if (!goodsPositionDto.MarkedForDeletion)
{
var goodsPosition = new
GoodsPosition(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
goodsPosition.Position =
goodsPositionDto.Position;
goodsPosition.TarrifNumber =
goodsPositionDto.TariffNumber;
goodsPosition.Description =
goodsPositionDto.Description;
nctsDepartureNo.AddGoodsPositions(goodsPosition);
}
}
foreach (IdentityOfSealDto identityOfSealDto in
nctsDepartureNoDto.IdentitiesOfSeals)
{
if (!identityOfSealDto.MarkedForDeletion)
{
var identityOfSeal = new
IdentityOfSeal(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
identityOfSeal.Identity =
identityOfSealDto.Identity;
nctsDepartureNo.AddIdentityOfSeals(identityOfSeal);
}
}
foreach (CustomsOfficeOfTransitDto
customsOfficeOfTransitDto in nctsDepartureNoDto.CustomsOffices)
{
if (!
customsOfficeOfTransitDto.MarkedForDeletion)
{
var customsOfficeOfTransit = new
CustomsOfficeOfTransit(nctsDepartureNo,
GetAccount(
nctsDepartureNoDto.AccountId));
customsOfficeOfTransit.CustomsOffice =
MapperFactory.GetCustomsOfficeCode(customsOfficeOfTransitDto.CustomsOffice);
nctsDepartureNo.AddCustomsOfficesOfTransit(customsOfficeOfTransit);
}
}
var documentGuarantees = new
List<DocumentGuarantee>(nctsDepartureNo.Guarantees);
foreach (DocumentGuarantee documentGuarantee in
documentGuarantees)
{
nctsDepartureNo.Guarantees.Remove(documentGuarantee);
_documentGuaranteeRepository.Delete(documentGuarantee);
}
_documentGuaranteeRepository.DbContext.CommitChanges();
foreach (DocumentGuaranteeDto documentGuaranteeDto
in nctsDepartureNoDto.Guarantees)
{
if (!documentGuaranteeDto.MarkedForDeletion)
{
var documentGuarantee = new
DocumentGuarantee(nctsDepartureNo,
GetAccount(nctsDepartureNoDto.AccountId));
documentGuarantee.Amount =
documentGuaranteeDto.Amount;
documentGuarantee.Type =
MapperFactory.GetGuaranteeTypeCode(documentGuaranteeDto.Type);
documentGuarantee.Guarantee =
_guaranteeRepository.Get(documentGuaranteeDto.GuaranteeId);
documentGuarantee.AccessCode =
MapperFactory.GetAccessCode(documentGuaranteeDto.AccessCode);
documentGuarantee.Document =
_documentRepository.Get(nctsDepartureNoDto.Id);
nctsDepartureNo.AddDocumentGuarantees(documentGuarantee);
}
}
}
return document;
}
return null;
}
So my tests are these
using System.Collections.Generic;
using NUnit.Framework;
using ProTeria.NET.ApplicationServices;
using ProTeria.NET.ApplicationServices.Contracts;
using ProTeria.NET.Common.DataContracts;
using ProTeria.NET.Common.Domain;
using ProTeria.NET.Common.Domain.Repositories;
using Rhino.Mocks;
namespace Tests.ProTeria.NET.Services
{
[TestFixture]
public class NctsDepartureNoServiceTests
{
private readonly IDocumentRepository _ducumentMockRepository =
CreateMockDocumentRepository();
private readonly IIdentityOfSealRepository
_identityOfSealMockRepository = CreateMockIdentityOfSealsRepository();
private readonly ICustomsOfficeOfTransitRepository
_customsOfficeOfTransitMockRepository =
CreateMockCustomsOfficeOfTransitRepository();
private readonly IAccountRepository _accountMockRepository =
CreateMockAccountRepository();
private readonly IDocumentGuaranteeRepository
_documentGuaranteeMockRepository =
CreateMockDocumentGuaranteeRepository();
private readonly IGuaranteeRepository _guaranteeMockRepository
= CreateMockGuaranteeRepository();
private readonly IGoodsPositionRepository
_goodsPositionMockRepository = CreateMockGoodsPositionRepository();
[Test]
public void GetAllDocumentsCallsTheReposiotoryMethod()
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
var searchCriteria = new DocumentSearchCriteriaDto();
//Act
documentService.Search(searchCriteria);
//Assert
_ducumentMockRepository.AssertWasCalled(x => x.GetAll());
}
[Test]
public void GetAllDocumentsShouldNotBeNull()
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
var searchCriteria = new DocumentSearchCriteriaDto();
//Act
IList<DocumentSearchResultDto> documentSearchResults =
documentService.Search(searchCriteria);
//Assert
Assert.That(documentSearchResults.Count,
Is.GreaterThan(0), "document list is empty");
}
[Test]
public void GetDocumentsByIdCallsTheReposiotoryMethod()
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
//Act
documentService.GetDocumentById(1);
//Assert
_ducumentMockRepository.AssertWasCalled(x => x.Get(1));
}
[Test]
public void GetGoodsPositionCallsTheReposiotoryMethod()
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
//Act
documentService.GetGoodsPosition(1);
//Assert
_goodsPositionMockRepository.AssertWasCalled(x =>
x.Get(1));
}
[Test]
public void SaveDocumentsShouldReturnTheSame
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
var documentDto = new NctsDepartureNoDto();
//Act
DocumentDto retDocumentDto =
documentService.SaveDocument(documentDto);
//Assert
Assert.AreEqual(documentDto, retDocumentDto);
}
private static IDocumentRepository
CreateMockDocumentRepository()
{
var repository =
MockRepository.GenerateMock<IDocumentRepository>();
repository.Expect(r =>
r.GetAll()).Return(CreateNctsDepartureNo());
return repository;
}
private static List<Document> CreateNctsDepartureNo()
{
var documents = new List<Document>();
Document document = new NctsDepartureNo(new Account("DJ"))
{
IsContainer = true
};
documents.Add(document);
return documents;
}
private static IIdentityOfSealRepository
CreateMockIdentityOfSealsRepository()
{
var repository =
MockRepository.GenerateMock<IIdentityOfSealRepository>();
return repository;
}
private static ICustomsOfficeOfTransitRepository
CreateMockCustomsOfficeOfTransitRepository()
{
var repository =
MockRepository.GenerateMock<ICustomsOfficeOfTransitRepository>();
return repository;
}
private static IAccountRepository
CreateMockAccountRepository()
{
var repository =
MockRepository.GenerateMock<IAccountRepository>();
return repository;
}
private static IDocumentGuaranteeRepository
CreateMockDocumentGuaranteeRepository()
{
var repository =
MockRepository.GenerateMock<IDocumentGuaranteeRepository>();
return repository;
}
private static IGuaranteeRepository
CreateMockGuaranteeRepository()
{
var repository =
MockRepository.GenerateMock<IGuaranteeRepository>();
return repository;
}
private static IGoodsPositionRepository
CreateMockGoodsPositionRepository()
{
var repository =
MockRepository.GenerateMock<IGoodsPositionRepository>();
return repository;
}
}
}
When testing the SaveDocumentsShouldReturnTheSame
I get a null exception for DbContextm on the method shown below.
using (_documentRepository.DbContext.BeginTransaction())
{
Also I test the Search method,
public IList<Document> GetAll()
{
return _documentRepository.GetAll();
}
public IList<DocumentSearchResultDto>
Search(DocumentSearchCriteriaDto documentSearchCriteria)
{
List<Document> objectList;
objectList = GetAll() as List<Document>;
List<DocumentSearchResultDto> dtoList = new
List<DocumentSearchResultDto>();
if (objectList != null)
{
foreach (Document coreObject in objectList)
{
DocumentSearchResultDto dto =
MapperFactory.GetDocumentSearchResultDto(coreObject);
dtoList.Add(dto);
}
}
return dtoList;
}
Since I am using AutoMapper
[Test]
public void GetAllDocumentsShouldNotBeNull()
{
//Arrange
IDocumentService documentService = new
DocumentService(_ducumentMockRepository,
_identityOfSealMockRepository,
_customsOfficeOfTransitMockRepository,
_accountMockRepository,
_documentGuaranteeMockRepository,
_guaranteeMockRepository,
_goodsPositionMockRepository);
var searchCriteria = new DocumentSearchCriteriaDto();
//Act
IList<DocumentSearchResultDto> documentSearchResults =
documentService.Search(searchCriteria);
//Assert
Assert.That(documentSearchResults.Count,
Is.GreaterThan(0), "address type list is empty");
}
Fails since the mismatch in data types.
How would I go about implementing Rhino Mocks properly to test my
server side methods
--
You received this message because you are subscribed to the Google Groups
"Rhino.Mocks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rhinomocks?hl=en.