2015-12-03 48 views
3

我正试图对Android-DDP库进行junit测试。对流星,Android-DDP库的Junit测试

要初始化流星对象,我们需要一个对我能够使用Robolectric实现的android上下文的引用。但是web-sockets可能正在与另一个线程上的服务器通话,因为这些线程不会调用回调方法,并且测试方法正在结束。

我用netstat来检查android客户端是否正在尝试通信。它显示各种ping/pong消息。所以,是的,它试图与服务器通话。

我也经历了这个教程, Android AsyncTask testing with Android Test Framework。这个告诉如何在UI线程上处理网络。但没有什么似乎是对的

的示例代码,我曾是:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP) 
@RunWith(RobolectricGradleTestRunner.class) 
public class MainActivityTest { 

    private MainActivity activity; 
    private Meteor meteor; 
    private String globalUrl = "ws://10.0.3.222:3000/websocket"; 

    @Before 
    public void setup() { 

     activity = Robolectric.setupActivity(MainActivity.class); 

     meteor = new Meteor(activity, globalUrl); 
     meteor.reconnect(); 

    /* 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    */ 

    } 

    @Test 
    public void validateMeteorIsConnected() { 

     assertTrue(meteor.isConnected()); 
    } 
} 

任何帮助将是明显的。提前致谢。

+1

你已经谈过你正在使用的图书馆,你还谈到了你认为是你的问题的原因。您还说过如何确保应用程序正在与服务器通话。但是你没有提供任何有关你的实际测试的信息?另外,您还没有分享您的代码,因为测试可能会导致错误。当他们甚至不知道你的流星应用正在做什么时,你不能猜测你的问题是什么?你的Android应用正在做什么?另外如果他们没有你的代码的部分来仔细检查,他们如何发现错误? – Ishan

+0

嘿,我正在进行图书馆及其方法的测试。 我已经用我的源代码更新了这个问题。 我的Android应用程序对库有简单的实现,我必须为Android DDP库执行简单的junit测试。 – cprakashagr

+0

尝试使用MeteorSingleton而不是新的Meteor对象。 – Ishan

回答

0

您定义了两种方法,setup()validateMeteorIsConnected(),但他们在哪里调用?

首先,您的设置不正确。在您致电new Meteor(...)后,您不需要reconnect()调用,因为构造函数已经建立连接。

而且,让你知道什么时候已经建立连接或数据的用武之地。这与mMeteor.setCallback(...);其中参数是thisactivity做你必须建立一个监听器。

正如您所说,工作是在不同的线程上完成的,而且所有内容都是异步的。

因此,连接后不能立即拨打validateMeteorIsConnected()

您需要一些计时器,如链接到的问题所示。

+0

我明白'reconnect()'是不需要的。流星自己做。 当'mMeteor.setCallBack(this)',我必须重写接口的方法。假设我在这些方法之前附加@Test符号,JUnit会在我编译它们的那一刻调用它们。所以,当这些方法被回调时,测试运行可能会结束。像界面上的一些方法,如onDataAdded,不能保证它会被回调。 我尝试了链接的延迟概念。但是,没有成功的迹象。您能否给我推荐一个样品。 – cprakashagr

+0

什么没有用?定时器/延迟概念的代码是什么?如果你调用构造函数'new Meteor(...)',一个连接将被建立。如果JUnit在几秒钟后调用你的'validateMeteorIsConnected()'方法,它应该真的是'true'。如果没有,连接不能建立(或者只是花费太长时间)。 – caw

+0

我试了30秒延迟。 MeUnit在JUnit中可能比平时花费更多。如果我试图通过应用程序而不是JUnit与流星建立连接,则很快会建立连接。 – cprakashagr