我正在现有软件上实施单元测试。 这些软件位于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。
我该如何用最小起订量来模拟呢?
谢谢您的帮助。
答案 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”以用于单元测试。