我有一个WCF服务,我在我的一个应用程序中使用。一切都工作正常,但我正在尝试创建一些具有相同API的测试类,但避免前往服务器获取其信息。例如:
// Goes to the server to get a list of names. It might be a while.
MyClient client = new MyClient();
string[] theNames = client.GetSpitefulUsers();
...
// This is what I would use in a test case...
public FakeClient : MyClient
{
...
public override string[] GetSpitefulUsers()
{
// This returns almost immediately, but I can't just override it because the
// 'MyClient' definition is generated code.
return new string[] {"Aldo", "Barry", "Cassie"};
}
}
那么提供这类功能的最简单方法是什么,而不必采用聪明的黑客攻击,模拟库等?
答案 0 :(得分:1)
WCF服务引用有一个接口,所以你的所有逻辑都应引用该接口,而不是服务客户端。在这种情况下,您将能够选择要传递给应用程序逻辑的实现(真实或虚假)。
假设你的WCF服务接口是这样的:
public interface IWcfInterface {
string[] GetTheNames();
}
您的应用程序逻辑类如下所示:
public class ApplicationLogic {
public IWcfInterface WcfInterface {get;set;}
public SomeLogic() {
WcfInterface.GetTheNames();
}
}
因此,如果您需要真正的实现,只需将其传递给应用程序逻辑的WcfInterface属性(通常这会执行依赖注入容器)。
虚假实施也很简单:
public FakeImplementation : IWcfInterface {
public string[] GetTheNames() {
return new string[] { "foo", "bar" };
}
}
答案 1 :(得分:0)
如果我是对的,编译器会建议使用关键字new。
http://msdn.microsoft.com/en-us/library/435f1dw2.aspx
这个msdnpage将解释如何使用它。
public class BaseC
{
public int x;
public void Invoke() { }
}
public class DerivedC : BaseC
{
new public void Invoke() { }
}