我正在编写一个Android应用程序,它需要监听UDP广播消息。
我试图在侦听器类中模拟AsyncTask,以便对其进行单元测试。
问题是我总是得到错误java.lang.RuntimeException:Method execute in android.os.AsyncTask not mocked。
public class DiscoveryListener
{
WorkGroupEventHandler workGroupEventHandler;
private AsyncTask<Void, Void, Void> asyncTask;
private boolean listener_active = false;
public boolean GetListener_active()
{
return listener_active;
}
public DiscoveryListener(WorkGroupEventHandler eventHandler)
{
workGroupEventHandler = eventHandler;
}
public void Start()
{
if (listener_active == false)
{
listener_active = true;
RunUdpListener();
}
}
public void Stop()
{
listener_active = false;
asyncTask.cancel(true);
}
public void RunUdpListener()
{
asyncTask = new AsyncTask<Void, Void, Void>()
{
@Override
protected Void doInBackground(Void... params)
{
byte[] msg = new byte[4096];
DatagramPacket datagramPacket = new DatagramPacket(msg, msg.length);
MulticastSocket multicastReceiveSocket = null;
try
{
multicastReceiveSocket = new MulticastSocket( 60000 );
while (listener_active)
{
if (isCancelled() == false)
{
multicastReceiveSocket.receive(datagramPacket);
ProcessIncommingMessage(datagramPacket.getAddress(), msg);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (multicastReceiveSocket != null)
{
multicastReceiveSocket.close();
}
}
return null;
}
};
asyncTask.execute();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({android.util.Log.class, android.os.AsyncTask.class})
public class DiscoveryListenerUnitTest
{
private WorkGroupEventHandler eventHandler = new WorkGroupEventHandler()
{
@Override
public void onWorkGroupEventHandle(String IpAddress, String Workgroup, String SerialNumber)
{
}
};
private DiscoveryListener discoveryListener = new DiscoveryListener(eventHandler);
private AsyncTask asyncTask;
@Test
public void discoveryListener_doesStart() throws Exception
{
PowerMockito.mockStatic(android.util.Log.class);
PowerMockito.whenNew(AsyncTask.class).withNoArguments().thenReturn(asyncTask);
asyncTask = PowerMockito.mock(AsyncTask.class);
when(asyncTask.execute()).thenReturn(null);
discoveryListener.Start();
assertEquals(true, discoveryListener.GetListener_active());
}
}
AsynctAsk.execute是最终的,而Mockito不能模拟最终的类或方法。
Cannot mock final methods - their real behavior is executed without any exception. Mockito cannot warn you about mocking final methods so be vigilant.
具体地说,这是因为Java可以在编译时解析链接,这意味着Mockito不能使用其生成的子类和方法重写来改变行为。
您可以选择使用Powermock,它使用一个特殊的类加载器来重写旧的行为,或者使用Robolectric,它做同样的工作,但是用特定于Android的测试友好的替代实现(“shadows”)替换类,其中包括一个用于AsyncTask的实现。
错误:第 1 行的解析错误:函数搜索(sour ^ 期望“字符串”、“数字”、“空”、“真”、“假”、“{”、“[”,得到“未定义” 代码:
我实现了以下REST调用: 也是一个提供和使用application/x-protobuf的提供者类: 我的pom。xml看起来像: 我的小部件。原型: 选项java_package=“example”;选项java\u outer\u classname=“WidgetsProtoc”; 对于http://localhost:8080/RESTfulExample/widgets我得到以下错误消
问题内容: 我已经阅读了 为什么在尝试在数据库中加载Blob时会出现java.lang.AbstractMethodError?,下载了我能找到的所有11g jdbc驱动程序,并将它们作为库和/或jar文件添加到了我的NetBeans应用程序中。我仍然不断收到相同的AbstractMethodError,这让我很生气!任何指导将不胜感激! 错误信息: 问题答案: 问题的原因是软件不兼容(jar文件
当我试图从netbean部署我的web应用程序时,我得到以下错误: 那是什么?为什么我会犯这个错误? 以下是来自的代码片段: 以下是netbeans服务器设置中的快照:
问题内容: 我正在尝试使用DB2运行一个简单的SQL语句,并且遇到了一些问题。我想在txt / db2文件中有一个脚本,并让引擎处理所有命令 这是脚本: 当我运行db2 -f / pathtofile时,我得到: 我究竟做错了什么?我的脚本有问题吗?另外,为什么没有“;”也能正常工作 我的陈述结尾处的终止符? 谢谢, 问题答案: 可能会有帮助, http://www.uc.edu/R/r25/do
尽管花了几个小时的时间,我还是弄不明白为什么会出现404错误。 我有一个非常简单的spring MVC应用程序,但我真的看不出有什么错误。请帮帮我,我疯了 结构: SpringMVCDemo src公司 视图 main-menu.jsp 我的控制器:HomeController。Java语言 我的视图:主菜单。jsp 网状物xml spring mvc演示servlet。xml
为什么会引发主线程上的网络异常?its在异步任务上 } 编辑: 完整代码: logcat:
我收到这样的类型错误:- 甚至我正在使用jdk版本:-java版本"1.7.0_55"OpenJDK运行时环境(IcedTea 2.4.7)(7u55-2.4.7-1ubuntu1)OpenJDK 64位服务器VM(构建24.51-b03,混合模式) 请有人帮助我,我应该在我的项目中使用这样的组件。