如何在MVC中的动作的单元测试中模拟类

时间:2018-11-05 10:30:52

标签: c# asp.net-mvc unit-testing automated-tests moq

我正在现有软件上实施单元测试。 这些软件位于ASP.NET MVC中,我想测试控制器的Action的返回。

但是在这个动作中,我有代码:

 public ActionResult EditProfile(
        string accountId = null,
        string partnership = null,
        AccountType? subscriptionType = null,
        bool forcePartnerUpdate = false)
    {
        var model = new EditProfileModel();
        var account = _authUser.Account;  
        var catalogClient = new CatalogService.CatalogClient(Request.Cookies, Globals.CatalogURL);

问题是因为最后一行:“ new CatalogService.CatalogService()”

我正在Action的其他部分使用此类:

model.ListBrands = new List<Brands>();
model.ListAvailableBrands = new List<Brands>();
model.ListSubscribedBrands = new List<Brands>();
var brands = catalogClient.GetBrandsWithManufacturer();

那么,我该如何模拟测试?

我已经抽象地考虑了接口并发送了参数的使用方式,但是我的NInjectModule中没有Request到IoC,并且在其他代码中此类还具有其他参数,所以我认为我不能IoC。

我该如何用最小起订量来模拟呢?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我已经思考和测试了很多,现在我必须为测试做模拟。

首先,我为班级创建了一个“工厂”:

sorted_list = sorted(original_list, key=len)

然后,我已经在NinjectModule中注册了此接口,并在Controller的构造函数中进行了设置。因此,我使用以下代码调用操作:

public interface ICatalogClientFactory
{
    ICatalogClient Create(HttpCookieCollection cookies, string catalogUrl);
}

public class CatalogClientFactory : ICatalogClientFactory
{
    public ICatalogClient Create(HttpCookieCollection cookies, string catalogUrl)
    {
        return new CatalogClient(cookies, catalogUrl);
    }
}

现在,我可以模拟“ ICatalogClientFactory”和“ ICatalogClient”以用于单元测试。