2010-07-22 13 views
0

J'essaye actuellement d'implémenter la fonctionnalité de AutoMocking de StructureMap et j'ai besoin d'aide pour obtenir le moqué.Comment puis-je obtenir AutoMocker de StructureMap pour simuler de fausses données?

J'ai une méthode d'essai comme suit:

[Test] 
public void DirctoryResult_Returns_Groups() 
{ 
    var autoMocker = new RhinoAutoMocker<GroupController>(MockMode.AAA); 

    GroupController controller = autoMocker.ClassUnderTest; 

    var directoryResult = controller.DirectoryResult("b"); 

    var fundDirectoryViewModel = (FundDirectoryViewModel)directoryResult.ViewData.Model; 

    Assert.IsNotNull(fundDirectoryViewModel.Groups); 
} 

Actuellement le test est d'échouer parce que fundDirectoryViewModel.Groups est nulle.

La mise en œuvre réelle de DirectoryResult est la suivante:

private readonly IGroupService _groupService; 
public PartialViewResult DirectoryResult(string query) 
{ 
    return PartialView(new FundDirectoryViewModel 
    { 
     Groups =_groupService.GetGroupsByQuery(query) 
    }); 
} 

_groupService.GetGroupsByQuery(query) utilise une interface pour IGroupRepository de lire des données de la base de données. Bien sûr, je ne veux pas que mon test lise les données de la base de données actuelle, mais quelqu'un peut-il me dire comment obtenir des données fictives pour cela?

Que dois-je faire pour que l'AutoMocker se moque des fausses données?

mise à jour:

pour référence, c'est la définition de GroupService & GroupRepository

public class GroupService : IGroupService 
{ 
    private readonly IGroupRepository _groupRepository; 

    public GroupService(IGroupRepository groupRepository) 
    { 
     _groupRepository = groupRepository; 
    } 

    public IList<CompanyGroupInfo> GetGroupsByQuery(string query) 
    { 
     return _groupRepository.GetGroupsByQuery(query); 
    } 
} 

public class GroupRepository : DataUniverseRepository, IGroupRepository 
{ 
    public GroupRepository(ISession session) 
    { 
     _session = session; 
    } 

    public IList<CompanyGroupInfo> GetGroupsByQuery(string query) 
    { 
     // dig into the database and return stuff with _session.. 
    } 
} 

Répondre

0

J'ai été informé que la question était erronée. Automocker ne se moque pas des données comme ça. C'est à moi de spécifier les fausses données avec Rhino Mocks.

Cela fonctionne:

[Test] 
public void DirctoryResult_Returns_Groups() 
{ 
    var service = autoMocker.Get<IGroupService>(); 
    service.Expect(srv => srv.GetGroupsByQuery(Arg<string>.Is.Anything)) 
     .Return(new List<CompanyGroupInfo> 
        { 
         new CompanyGroupInfo(), 
         new CompanyGroupInfo(), 
         new CompanyGroupInfo() 
        }); 

    service.Replay(); 

    var directoryResult = _controller.DirectoryResult("b"); 

    var fundDirectoryViewModel = (FundDirectoryViewModel)directoryResult.ViewData.Model; 

    Assert.That(fundDirectoryViewModel.Groups.Count, Is.EqualTo(3)); 

    service.AssertWasCalled(srv => srv.GetGroupsByQuery(Arg<string>.Is.Equal("b"))); 
}