单元测试接口上的显式转换错误

时间:2016-06-26 13:39:41

标签: c# unit-testing interface

由于接口的显式强制转错,我遇到单元测试失败的问题。我不确定是否有解决方案,但我还没有找到一个足够明确的解决方案。

在我的构造函数中,我传入了数据模型的通用接口。然后我明确地将Idatamodel强制转换为我的具体实现。这在我的单元测试中无法在运行时执行。

CardView

这是我的单元测试中错误失败的地方。我有这个方法的存根,但它在运行时失败了显式转换,我仍然有点困惑为什么。我在单元测试中创建了这个模型的存根,但它仍然失败

    ...
   cardView = (CardView) itemView.findViewById(R.id.card_view_list_text);
    photosRecyclerView = (RecyclerView) itemView.findViewById(R.id.recycler_view_photos_memo);
    relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relativelayout_list_item_text_memo);

    photosRecyclerView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("recyclerview called");
            return false;
        }
    });
    relativeLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            System.out.println("RELATIVELAYOUT called");
            return false;
        }
    });

    cardView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("CARDVIEW CALLED");
            return false;
        }
    });
   ...

3 个答案:

答案 0 :(得分:0)

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

public class TestDataModel : IMyInterface{}

答案 1 :(得分:0)

供以后遇到此问题的人使用。我最近遇到了从IEnumerable<IBlah>转换为IEnumerable<Blah>的问题。我解决该问题的方法是使用linq select语句,并在我遍历该语句时对其进行强制转换。像这样:

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

答案 2 :(得分:0)

您正在使用Getstuff而不是GetListOfStuff-也许是问题所在?