- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试测试具有异步方法的工作流程 - 设置大致如下所示:
@RunWith(FlowBlockJUnit4ClassRunner.class)
public class testWorkflow {
@Rule
public WorkflowTest workflowTest = new WorkflowTest();
@Mock
protected Activities mockActivities;
@Before
public void setUp() throws Exception {
workflowTest.addActivitiesImplementation(mockActivities);
workflowTest.addWorkflowImplementationType(Workflow.class);
workflow = workflowFactory.getClient();
}
@Test
public void testMethod1Exception() throws Throwable {
doThrow(new RuntimeException("bang!"))
.when(mockActivities).method1();
try {
runWorkflow();
fail();
} catch (Exception e) {
verify(mockActivities, never()).method2();
}
}
private void runWorkflow() throws Throwable {
AsyncScope scope = new AsyncScope() {
@Override
protected void doAsync() {
workflow.run();
}
};
scope.eventLoop();
if (!scope.isComplete()) {
System.out.println(scope.getAsynchronousThreadDumpAsString());
}
}
}
我的问题出在我的代码中,工作流程大致如下:
public class Workflow {
public void run() {
final Promise<Result> pResult = client.method1();
doAsync(pResult);
}
@Asynchronous
public void doAsync(Promise<Result> pResult) {
...
}
}
我发现单元测试命中了 fail()
调用。读取 getAsynchronousThreadDumpAsString 方法的输出似乎表明工作流正在等待 pResult 可用于 @Asynchronous 方法,但它不可用,因为我引发了异常。有什么办法可以让这样的测试发挥作用吗?我试图开始工作的实际测试是测试代码在 doCatch block 中的行为方式,但由于 @Asynchronous
方法调用,工作流程似乎卡住了。
最佳答案
我认为问题是您同时使用 AsyncScope 和 WorkflowTest 规则。 WorkflowTest 已经在 AsyncScope 中执行 @Test 方法,因此另一个 AsyncScope 可能会混淆它。我会重写你的代码,如下所示:
@RunWith(FlowBlockJUnit4ClassRunner.class)
public class testWorkflow {
@Rule
public WorkflowTest workflowTest = new WorkflowTest();
@Mock
protected Activities mockActivities;
@Before
public void setUp() throws Exception {
workflowTest.addActivitiesImplementation(mockActivities);
workflowTest.addWorkflowImplementationType(Workflow.class);
workflow = workflowFactory.getClient();
}
@Test
public void testMethod1Exception() throws Throwable {
doThrow(new RuntimeException("bang!"))
.when(mockActivities).method1();
new TryCatchFinally() {
Throwable failure;
protected void doTry() {
workflow.run();
}
protected void doCatch(Throwable e) {
failure = e;
}
protected void doFinally() {
assertNotNull(failure);
}
};
}
}
但实际上,使用预期时,甚至上述所有内容都不是必需的:
@RunWith(FlowBlockJUnit4ClassRunner.class)
public class testWorkflow {
@Rule
public WorkflowTest workflowTest = new WorkflowTest();
@Mock
protected Activities mockActivities;
@Before
public void setUp() throws Exception {
workflowTest.addActivitiesImplementation(mockActivities);
workflowTest.addWorkflowImplementationType(Workflow.class);
workflow = workflowFactory.getClient();
}
@Test(expected=RuntimeException.class)
public void testMethod1Exception() throws Throwable {
doThrow(new RuntimeException("bang!"))
.when(mockActivities).method1();
workflow.run();
}
}
@Test 方法内的代码在虚拟工作流程的上下文中执行。这就是为什么,例如,内部测试工作流程是使用普通客户端而不是外部客户端创建的。
关于java - 使用 @Asynchronous 方法对 SWF 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953419/
来自 Akka 文档,Pipelining and Parallelism Akka Streams processing stages (be it simple operators on Flow
我正在开发一个提取元数据的 chrome 扩展程序。解析元数据的代码包含在内容脚本中。 background.js 和 content.js 通过 sendMessage 请求和响应进行通信。我遇到了
我正在使用 Python 3.7.4 和这段代码(MWE): import asyncio async def foo(x): await asyncio.sleep(1) retur
嘿,我对 Dart Futures 很陌生,我有以下情况。 每当用户在 UI 中键入一个字母时,addressChanged()我的 ui_component 中的方法被调用。该方法调用方法getPr
我在尝试将异步函数转换为同步函数时遇到问题。 这是类中的一个方法: doPost: function(call, data) { var uri = 'http://localhost/api
在很多关于 C# 的 async/await 的讨论中,我看到人们提到了“自然异步”或“纯异步”的术语。这些术语到底是什么意思? “自然异步”操作的一些示例是什么?为什么这样调用它? “非自然异步”操
现在我正在使用 Gevent,我想问两个问题: 有没有办法执行特定的任务,这将 从不异步执行 (而不是在每个任务中使用锁) 有没有办法到优先在 Gevent 中生成任务?就像一组将以低优先级生成的任务
在 document , 如果方法也用@gen.coroutine 修饰,则不需要@web.asynchronous。像这样 @web.asynchronous @gen.coroutine def
已在 Google Analytics(分析)帮助论坛中发布此内容,但无人能提供帮助。希望我在这里有更多的运气......: 我对我的网页使用 Google Anlaytics 异步跟踪。像个魔法一样
我正在尝试从 Controller 异步发送电子邮件并收到以下错误: 我不想等待电子邮件发送完成操作。 An asynchronous module or handler completed whil
在使用 SendMailAsync 时出现以下错误: An asynchronous module or handler completed while an asynchronous operati
我有一个非常简单的 ASP.NET MVC 4 Controller : public class HomeController : Controller { private const st
我正在编写一个使用 ASP.NET Web API 代理一些 HTTP 请求的应用程序,我正在努力识别间歇性错误的来源。这似乎是一个竞争条件...但我不完全确定。 在详细介绍之前,先介绍应用程序的一般
Cancel CancellationTokenSource 的成员对象“传达取消请求”,我认为这意味着它是触发并忘记并且不会等到取消完成(例如,所有异常处理程序都已运行)。这很好,但我需要等到一个未
在 D 中异步调用其他进程的首选方法是什么?我的用例正在调用 svn status检查退出状态,并解析其标准输出和错误。 最佳答案 我想 std.stdio.popen是你想要的: void pope
我一直听说使用异步编程模式会使我的代码运行得更快。为什么这是真的?无论是现在运行还是稍后运行,都不是必须以任何一种方式运行完全相同的代码吗? 最佳答案 它不是更快,它只是不浪费时间。 同步代码在等待
我有点困惑为什么同步调用与异步调用不同,因为从来没有“立即”响应,它仍然需要几纳秒或几毫秒? 最佳答案 同步调用在完成其工作(或达到超时)后返回其调用者。异步调用在启动其他事件后立即返回。 这意味着,
我正在尝试使用 MSDN 上描述的 OVERLAPPED 结构异步调用 DeviceIO 函数。 我正在使用 FSCTL_ENUM_USN_DATA 控制代码来枚举 NTFS 驱动器的 MFT,但我无
我一直在尝试创建一个服务器进程,以异步方式从客户端进程接收输入文件路径和输出路径。服务器进行了一些与数据库有关的转换,但是为了简单起见,我们假设它只是将所有内容都转换为大写。这是服务器的一个玩具示例:
我正在编写一个异步方法,它应该异步查询一个端口,直到找到一个,或者在 5 分钟后超时; member this.GetPort(): Async = this._GetPort(DateTim
我是一名优秀的程序员,十分优秀!