单元测试在接口上显式强制转换错误

本文关键字:转换 错误 接口 单元测试 | 更新日期: 2023-09-27 17:49:18

我有一个单元测试失败的问题,由于一个显式转换错误的接口。

我不确定是否有解决这个问题的办法,但是我还没有找到一个足够清晰的解决方案。

在构造函数中,我传递了数据模型IAssetDataModel theAssetDataModel的接口。然后,我显式地将Idatamodel转换为我的特定实现。在我的单元测试中,这在运行时执行失败。

public EventFinder(IEventFinder Successor,
                       IAssetDataModel theAssetDataModel,
                       IAssetEventHandler theEventHandler)
    : base(Successor, theAssetDataModel, theEventHandler) {}
    // later on I make this cast to call the method I need
    List stuff = ((IMyOtherDataModel)_AssetDataModel).GetListOfStuff();

这里是它在我的单元测试中失败的地方…我有这个方法的存根,但它在运行时显式强制转换失败,我不确定为什么。

我在单元测试中创建了这个模型的存根,但它仍然失败。

var stub_my_Data_model = new StubImyAssetDataModel();
stub_my_Data_model.Getstuff = () =>
    {
        List<string> results = new List<string>();
        results.Add("test1");
        return results;
    };

单元测试在接口上显式强制转换错误

我做了一些研究,答案是在从接口派生的测试类中创建一个数据模型的实现。

public class TestDataModel : IMyInterface{}

您是存根Getstuff而不是GetListOfStuff -也许这就是问题所在?

为将来有此问题的人。我最近有这个问题从IEnumerable<IBlah>转换到IEnumerable<Blah>。我解决这个问题的方法是使用linq select语句,并在迭代时对每个语句进行强制转换。像这样:

var interfaceValues = service.returnIBlahItems();
var castedValues = interfaceValues.Select(item => (Blah) item);