我正在开发一个网络应用程序,我希望得到正确的单元测试.这个时候我们会这样做,你知道吗?:)
不过,我在测试网络连接时遇到了麻烦.
在我的应用程序中,我使用plain java.net.Sockets.
例如:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Message {
byte[] payload;
public Message(byte[] payload) {
this.payload = payload;
}
public boolean sendTo(String hostname, int port) {
boolean sent = false;
try {
Socket socket = new Socket(hostname, port);
OutputStream out = socket.getOutputStream();
out.write(payload);
socket.close();
sent = true;
} catch (UnknownHostException e) {
} catch (IOException e) {
}
return sent;
}
}
Run Code Online (Sandbox Code Playgroud)
我读到了关于嘲笑但不确定如何应用它.
我目前正在尝试获得一个包含Service Factory运行的简单包.
这是我的工厂类:
public class SvcFactory implements ServiceFactory<ServiceB> {
@Override
public ServiceB getService(Bundle bundle,
ServiceRegistration<ServiceB> registration) {
return new ServiceBImpl();
}
@Override
public void ungetService(Bundle bundle, ServiceRegistration<ServiceB> registration,
ServiceB service) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是我应该由工厂创建的服务:
public class ServiceBImpl implements ServiceB {
private ServiceA svcA;
public void setA(ServiceA a) {
svcA = a;
}
}
Run Code Online (Sandbox Code Playgroud)
最后是OSGI-INF/component.xml
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="bundleb.internal.SvcFactory">
<implementation class="bundleb.internal.SvcFactory"/>
<reference bind="setA" cardinality="1..1" interface="bundlea.ServiceA" name="ServiceA" policy="static"/>
<service servicefactory="true">
<provide interface="bundleb.ServiceB"/>
</service>
</scr:component>
Run Code Online (Sandbox Code Playgroud)
如果我在equinox中运行我的测试包(A,B和C),我收到以下错误:
org.osgi.framework.ServiceException: org.eclipse.equinox.internal.ds.FactoryReg.getService() returned a service object that is …Run Code Online (Sandbox Code Playgroud)