我正在尝试编写单元测试并遇到错误
父级没有默认的构造函数。默认构造函数必须明确定义。
我看了看这意味着什么,我看到它提到没有公共构造函数。唯一的事情是,我的代码中确实有此错误,所以我很困惑为什么会出现此错误。
这是单元测试。
public void CalculateVat_ReturnsCorrectAmount()
{
// Arrange
const decimal expectedResult = 2;
_mockSingleValueParameter = new Mock<ISingleValueParameterService>();
_mockItemCache = new Mock<ItemCache>();
_mockReferenceDataService = new Mock<ReferenceDataService>();
_Calculator = new CostCalculator(_mockSingleValueParameter.Object, _mockItemCache.Object,
_mockReferenceDataService.Object);
// end
//.....
}
行
_calculator = new CostCalculator(_mockSingleValueParameter.Object, _mockItemCache.Object,
_mockReferenceDataService.Object)
是引发错误的人。
这是CostCalculator
的构造函数。
public CostCalculator(
ISingleValueParameterService singleValueParameterService, ItemCache cache, ReferenceDataService referenceDataService);
{
_itemCache = cache;
_singleValueParamService = singleValueParameterService;
_refDataService = referenceDataService;
}
项目中还有其他类似的代码,但是可以正常工作。我不明白它们之间的区别。
TIA!
答案 0 :(得分:0)
如果要模拟具体的类而不是接口,则它必须具有默认的构造函数(即无参数),并且要对其执行设置的任何方法都必须是虚拟的。
对于您来说,ItemCache
或ReferenceDataService
(或两者)都缺少默认构造函数。