在下面的代码中,我有一个类Foo,我的main方法调用它(没有接口)。该属性没有后备字段或setter,而是调用私有方法。 Foo不能改变,也不能将foo的用法改为IFoo接口。
- 如何更改foo.FooValue的值?
- 我可以在单元测试中包含System.Reflection,System.Reflection.Emit,.NET标准库等(不安全的代码,等等)以改变返回值吗?
我很感激,如果有什么东西它必定是相当的“邪恶的”#34;但我感兴趣的是"邪恶"答案。
public class Program
{
public static void Main(){
Foo foo = new Foo();
int bar = foo.FooValue;
}
}
public class Foo{
public int FooValue
{
get
{
return this.FooMethod();
}
}
private int FooMethod
{
return 0;
}
}
相关问题:
How to set value of property where there is no setter - Related but unanswered - 也许答案是"不是#34;但我不相信最高的答案只是指出你可以通过改变a来实现这一点(不存在的支持领域。
Intercept call to property get method in C# - 有趣。不确定这是否是我的答案,如果是,不确定如何在单元测试中使用它。
编辑:好的。我将重新编写代码以使其更易于测试。然而,出于兴趣,有没有人成功地通过这种情况破解了他们的方式?
答案 0 :(得分:3)
您可以为Foo
创建可以模拟的代理:
public class FooProxy : IFoo
{
private Foo _Foo;
public FooProxy(Foo foo)
{
_Foo = foo;
}
public int FooValue
{
get {return _Foo.FooValue();
}
}
public interface IFoo
{
public int FooValue {get;}
}
然后您可以使用DI“注入”IFoo
并使您的代码更易于测试。