用Mock进行单元测试。父级没有默认构造函数

时间:2018-07-09 14:02:39

标签: c# unit-testing nunit moq

我正在尝试编写单元测试并遇到错误

  

父级没有默认的构造函数。默认构造函数必须明确定义。

我看了看这意味着什么,我看到它提到没有公共构造函数。唯一的事情是,我的代码中确实有此错误,所以我很困惑为什么会出现此错误。

这是单元测试。

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!

1 个答案:

答案 0 :(得分:0)

如果要模拟具体的类而不是接口,则它必须具有默认的构造函数(即无参数),并且要对其执行设置的任何方法都必须是虚拟的。

对于您来说,ItemCacheReferenceDataService(或两者)都缺少默认构造函数。