我可以模拟asynctask" doInBackground"的返回值。在junit测试期间的方法?

时间:2017-03-23 21:03:41

标签: android junit android-espresso

我知道这个问题很奇怪。但我仍然想知道有没有办法嘲笑asynctask" doInBackgound"方法在测试期间使用Junit和Mokito返回值?

我想要的是:测试用例将运行以执行asyncTask。在asyncTask期间,我想更改将传递给onPostExecute()的结果。那么有没有办法指定doInBackground()的结果值?

我想这样做的原因是因为: 当Espresso单击UI上的按钮时,它将执行调用扫描程序的asyncTask。但是在测试期间我并不想要扫描,所以我使用mokito来模拟Scanner类并将其传递给asyncTask。由于Scanner类是第三方类,我无法获取/设置它的值。但我想指定扫描结果,所以我试图在asynctask中指定它。

这是代码逻辑: 这是应用代码:

@Override
    protected String doInBackground(ScanDataCollection... params) {
        String result = ScanDataCollection.getScanData().getData();
        return result;           
    }

@Override
    protected void onPostExecute(String result) {
        /* Do something with "result"*/
    }  

这是测试代码:

        ScanDataCollection scanDataCollection = mock(ScanDataCollection.class);
        asyncTask.execute(scanDataCollection);

现在我想要的是,当asyncTask运行其doInBackground时,返回一个值为" 123&#34 ;;

的String

此asynctask将由用户用户单击按钮触发并使用扫描程序扫描qr代码。但在测试中,我并不想真正想要用户扫描"扫描"。我想模拟用户扫描行为。所以我用mokito来模拟" ScanDataCollection"宾语。自" ScanDataCollection"是第三方lib,它没有设置值的方法,那么如何设置扫描结果的值并让测试用例继续?所以我想弄清楚我可以在测试中触摸doneBackground()方法并为它设置返回值吗?

我可以执行类似于调用getScanData()。getData()的方法,返回" 123&#34 ;?怎么样?

0 个答案:

没有答案