Тестирование вызова процедуры SQL в шаблоне хранилища - PullRequest
0 голосов
/ 14 мая 2018

Можете ли вы посоветовать мне, как написать модульный тест / создать макет для этого класса?

public class LoadRepository :Repository<Load, LoadModel>,ILoadRepository
 {
    IUSCanadaCityStateRepository _USCanadaCityStateRepository;
    public LoadRepository(DbContext dbContext, IUSCanadaCityStateRepository  USCanadaCityStateRepository) : base(dbContext)
    {
        _USCanadaCityStateRepository = USCanadaCityStateRepository;
    }        
    public int GetPickUpLocations(int loadId)
    {
        var count = _dbSet.FromSql("SELECT COUNT(LocationID) as locationCount FROM vPickupLoc WHERE vPickupLoc.LoadID = @p0", loadId).ToArray();
        return count[0].LoadLocations.Count;
    }


    public LoadCarrierInfo UpdateCarrierInfo(LoadCarrierInfo loadCarrierInfo)
    {

        return _dbSet.FromSql("UpdatePickCarrier @CarrierID,@LoadID, @Primary,@AssistingPortalID,@AssistingEmployeeID",
                    new SqlParameter("LoadID", SqlDbType.Int) { Value = loadCarrierInfo.LoadId },
                    new SqlParameter("Dispatcher", SqlDbType.VarChar) { Value = loadCarrierInfo.Dispatcher },
                    new SqlParameter("EmployeeID", SqlDbType.Int) { Value = 1 }, // logged in Employee instead
                    new SqlParameter("AssistingPortalID", SqlDbType.Int) { Value = loadCarrierInfo.AssistingPortalId },
                    new SqlParameter("AssistingEmployeeID", SqlDbType.VarChar) { Value = loadCarrierInfo.AssistingEmployeeId })
                    .Select(x=>new LoadCarrierInfo { }).FirstOrDefault();
    }

}

К сожалению, все методы написаны таким образом, и я не уверен, сколько тестируемого может быть.

Большое спасибо!

1 Ответ

0 голосов
/ 15 мая 2018

вы можете использовать насмешливый фреймворк, такой как Nsubstitute . Используйте это так,

var loadRepo = Substitute.For<ILoadRepository>();

тогда вы можете ввести макет в потребителя ILoadRepository. Тогда вы можете издеваться над такими методами,

var returnValue = new LoadCarrierInfo();
loadRepo.UpdateCarrierInfo(Arg.Any<LoadCarrierInfo>).Returns(returnValue );

Это вернет returnValue объект для вызова UpdateCarrierInfo метода с любым аргументом.

В документации по Nsubstitute представлены дополнительные параметры.

...