2010-07-22 13 views
0

我目前正在嘗試實現StructureMap的AutoMocking功能,我需要得到嘲笑的幫助。如何獲取StructureMap的AutoMocker來模擬假數據?

我有一個測試方法如下:

[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); 
} 

目前的測試失敗,因爲fundDirectoryViewModel.Groups爲空。

真正實施DirectoryResult如下:

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

其中_groupService.GetGroupsByQuery(query)使用接口來IGroupRepository讀取來自數據庫中的數據。當然,我不希望我的測試從實際數據庫中讀取數據,但是有人能告訴我如何獲取模擬數據嗎?

我需要做些什麼來讓AutoMocker爲我模擬僞造的數據?

更新:

以供參考,這是

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.. 
    } 
} 

回答

0

我被告知,這個問題是錯誤的GroupService & GroupRepository的定義。 Automocker不會模擬這樣的數據。我可以用Rhino Mocks指定假數據。

這工作:

[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"))); 
} 
相關問題