用于测试MyClass -
我有:
MyClass{
private MyThing usedThing = new MyThing();
public String funcToTest(){
return usedThing.Fields.something.ToString();
}
}
问题: 这只是方法的一部分,但我的问题是没有setter,或者没有更改prod代码,我怎样才能注入模拟< strong> MyThing 对象进入测试?
谢谢
答案 0 :(得分:1)
你可以使用反射。这很糟糕,因为它允许您在拥有类之外使用私有方法或字段,从而打破了封装。但测试是一个有意义的用例。
您可以通过以下方式从测试类访问私有字段:
MyClass myClass = new MyClass();
Field field = MyClass.class.getDeclaredField("usedThing");
field.setAccessible(true); // to allow the access for a private field
field.set(myClass, myMock);
答案 1 :(得分:0)
从技术上讲,这只能通过反射来实现,但在这种情况下,这是一个非常糟糕的主意。