Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为服务类创建单元测试?_C#_Unit Testing_Moq - Fatal编程技术网

C# 如何为服务类创建单元测试?

C# 如何为服务类创建单元测试?,c#,unit-testing,moq,C#,Unit Testing,Moq,我有以下服务类别代码: public class StaySearchManager { private readonly IPriceGridRepo _priceGridRepo; public StaySearchManager(IPriceGridRepo priceGridRepo) { _priceGridRepo = priceGridRepo; } public async Task<IEnumerable<

我有以下服务类别代码:

public class StaySearchManager
{
    private readonly IPriceGridRepo _priceGridRepo;

    public StaySearchManager(IPriceGridRepo priceGridRepo)
    {
        _priceGridRepo = priceGridRepo;
    }


    public async Task<IEnumerable<StaySearchResult>> Search(StaySearchParameter searchParameter)
    {
        if (!searchParameter.RoomIds.Any())
            return new StaySearchResult[0];
        PriceGrids[] grids = await _priceGridRepo.GetRoomPriceGrid(searchParameter.RoomIds);
        return grids.Select(g => g.TryCreateStay(searchParameter)).Where(s => s != null).ToList();           
    }
}
公共类StaySearchManager
{
私有只读IPriceGridRepo(priceGridRepo);
公共部门主管(IPriceGridRepo priceGridRepo)
{
_priceGridRepo=priceGridRepo;
}
公共异步任务搜索(StaySearchParameter searchParameter)
{
如果(!searchParameter.RoomIds.Any())
返回新的StatySearchResult[0];
PriceGrids[]grids=wait\u priceGridRepo.GetRoomPriceGrid(searchParameter.RoomIds);
返回grids.Select(g=>g.TryCreateStay(searchParameter)).Where(s=>s!=null.ToList();
}
}
我能够创建单元测试(使用moq)来检查: -如果没有房间ID,我们将返回一个空结果 -如果有一些房间ID,我们将使用good参数调用repo

但是,我如何对stay创建过程进行单元测试呢

第一种解决方案是创建一个IPriceGrid itnerface,然后对其进行模拟,但这似乎是一种过度工程,因为该接口仅用于单元测试

第二个解决方案是进行交互测试,但它将是我在PriceGrid上的单元测试的副本


有第三种解决方案吗?

您不能断言
Search
方法的返回结果吗?如果我正确理解了这个问题。@user3185569是的,我可以,因为通过mockRepo,我可以返回我想要的网格(因此可以推断停留时间/价格),这是第二个解决方案:我的所有测试都将与网格的单元测试相同。您需要远离微测试(测试每个类)并习惯于功能测试(测试多个类之间的协作)。当您测试
StaySearchManager
时,您是在间接测试PriceGrids。(如果您仍然对所有代码执行路径具有100%的覆盖率,则这一点适用)您的
PriceGrid
类似乎违反了SRP原则,并将您困在其中dilemma@SirRufo只有一种基于两个日期计算价格的方法,你能在这里发布一个更详细的答案吗?我应该创建一个昂贵的服务吗?但我认为最终我会有一个贫乏的领域模型