如何编写模拟单元测试代码来测试将输入参数接口向下转换为具体类的类方法?

问题描述 投票:0回答:1

我正在编写模拟单元测试代码,该代码将测试将输入参数接口向下转换为具体类的类方法。

这是名为 CarWrapperFactory 的“被测系统 (SUT)”类:

public class CarWrapperFactory : ICarWrapperFactory
{
    public ICarWrapper CreateCarWrapper(ICarConfigurationWrapper carConfigurationWrapper)
    {

        // downcasting occurring on next line, and also subsequently invocation of "protected internal" method
        CarConfiguration loggerConfiguration = ((CarConfigurationWrapper)carConfigurationWrapper).GetCarConfigurationAdaptee();

        return new CarWrapper(carConfiguration.CreateCar());
    }
}

在前面提到的 CarWrapperFactory SUT 类中,存在向下转换代码,因为它调用名为 GetCarConfigurationAdaptee 的“受保护内部”方法。

在我的基于 NSubstitute 的模拟单元测试代码中,我从以下内容开始:

ICarConfigurationWrapper carConfigurationWrapperMock = Substitute.For<ICarConfigurationWrapper>();

 // Fill-in-blank code….how to mock the “protected internal” method called GetCarConfigurationAdaptee

ICarWrapperFactory carWrapperFactorySUT = new CarWrapperFactory();

  ICarWrapper carWrapper = carWrapperFactorySUT. CreateCarWrapper(carConfigurationWrapperMock);

有人可以提供上面“填空”代码的代码吗?

unit-testing mocking protected internals nsubstitute
1个回答
0
投票

首先 ICarConfigurationWrapper 应该包含所有方法作为类的契约

调用受保护的方法是糟糕的代码设计,将它们视为私有方法,因此您需要在界面中将此受保护的方法拉起。并且您不需要进行任何转换,并且在单元测试中您可以轻松地用模拟实现替代

© www.soinside.com 2019 - 2024. All rights reserved.