刚遇到一个问题。我正在尝试准备好wcf服务unittest,或者更好的是必须使用unittest测试所有代码。
Atm不可能的结局我已经连接到每次使用的crm 2011服务器。
所以我用一个接口代替了它。但我想像使用WCF一样对WCF进行单元测试。
现在,我的想法是制作一个公共方法并建立一个虚假的连接。
现在我的问题是,即使它不在接口中,也可以调用此方法(例如:ConnectionHandler)吗?
看起来像这样:
public interface IWCF
{
[OperationContract]
bool method1();
[OperationContract]
bool method2();
}
public class WCF: IWCF
{
public bool method1(){
...
}
public bool method2(){
...
}
private connection connectionHandler;
public connection ConnectionHandler(Iconnection con){
if(con != null){
connectionHandler = con;
} else {
connectionHandler = takedefault;
}
}
}
编辑
啊,我忘了告诉我:我实际上是出于安全考虑,我不希望任何人可以将不同的连接传递到服务器,仅出于单元测试目的。
任何精心设计的代码段的重要功能之一就是您要清楚地向客户展示其功能。这将成为面向服务的应用程序的关键功能,因为您以标准化的方式公开功能以供外部客户端使用。
原则上,调用不属于接口的方法是不好的,因为您现在正在编程实现而不是接口。令人高兴的是,WCF知道这一点,并且不会让您使用不在接口上的方法,因为该方法未使用OperationContract
属性进行修饰。
对于您的代码-我不确定您要实现的目标是什么-拥有一个客户端集(我假设是这样),例如数据库连接,这让我有些不安(首先,这意味着您的服务是保持某些违反服务无状态原则的状态)。这并不意味着您所做的事情一定是错误的,但是您应该发现,在精心设计的应用程序中,您几乎不必违反它。
就是说,如果您想向不同的客户端公开不同的功能区域,那么正确的方法是在服务上公开代表不同协定的端点:
[ServiceContract]
public interface IWCF
{
[OperationContract]
bool method1();
[OperationContract]
bool method2();
}
[ServiceContract]
public interface IConnectionWCF
{
[OperationContract]
bool SetConnection(string connection);
}
public class WCF : IWCF, IConnectionWCF
{
public bool method1()
{
...
}
public bool method2()
{
...
}
public bool SetConnection(string connection)
{
...
}
}
您还需要注意,接收到的WCF服务必须首先由客户端序列化,通过有线发送并在服务器上反序列化。您在这里处理的是具体类,而不是抽象。Iconnection
在面向服务的环境中,将接口(例如)作为参数传递给服务调用并没有任何意义。
关于单元测试-请记住,从根本上讲,该类WCF
只是一个普通的老类。您可以对此类进行单元测试,以使其独立于WCF服务。无论如何,您都不应该在单元测试中设置任何服务托管功能-您要检查编写的代码是否正确-WCF堆栈已由Microsoft测试。
编辑
在回答您的意见,建议作为在这里,你应该使用的构造方法注入设置连接对象时的类实例化。这就提出了一个问题,即您如何获得对WCF服务的实例化的控制。您需要实现IInstanceProvider
,或更详细的实现请参见此处。这样,当您的服务托管在WCF中IInstanceProvider
时,可以在测试时使用,只需将伪造的连接对象传递给构造函数即可。
编辑
为了明确起见,此类的单元测试将类似于以下内容:
[TestClass]
public class UnitTests
{
[TestMethod]
public void Test()
{
Iconnection connection = new FakeConnection();
WCF classUnderTest = new WCF(connection);
//Run test logic
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句