我知道这个问题很奇怪。但我仍然想知道有没有办法嘲笑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 ;?怎么样?