【发布时间】:2016-03-28 13:35:26
【问题描述】:
我有一个控制器,其中包含一个 business 类,该类在内部具有对 datahandler 的依赖关系。为了测试那个商务舱,我需要模拟datahandler。设置完成后,我将使用模拟的datahandler 分配商务舱的datahandler。但是在调试时,业务类'datahandler 显示为 null ,我知道我应该使用构造函数来注入模拟对象。但是是否可以不使用任何构造函数注入来做到这一点?任何机构可以帮助我吗?
我的商务舱:
public class FooBusiness
{
public static BarDataHandler _barDatahandler = new BarDataHandler();
...
}
测试类:
public class FooBusinessTest
{
...
_mockedBarDataHandler = new Mock<IBarDataHandler>(){CallBase:true};
public FooTestMeth()
{
//Arrange
_mockedBarDataHandler.Setup(x=>x.Search(It.IsAny<int>).Returns(1);
...
FooBusiness _fooBusiness = new FooBusiness();
FooBusiness._barDatahandler = _mockedBarDataHandler.Object;
//Act
...
}
}
【问题讨论】:
-
构造函数注入是一种方式,但您也可以设置属性。我不喜欢这个,但这是另一个问题。您需要删除 static 关键字并且 _barDatahandler 应该是 IBarDataHandler 类型。应该按预期工作....您是否有理由希望这个公共字段是静态的?
-
@Marc : 很久以前没有人编码过,我不应该更改业务类.. 你为什么不把这个放在答案中以便我可以接受?
-
我发布了我的答案。如果需要,您可以标记为已回答。
标签: c# unit-testing asp.net-mvc-4 moq