testing - 在集成测试中,为了测试用同步进程替换异步进程是否有意义?

标签 testing integration-testing asynchronous

在集成测试中,异步过程(方法、外部服务)构成了非常艰难的测试代码。相反,如果为了测试,我将异步部分分解出来并创建一个依赖项并将其替换为同步部分,这会是一件“好事”吗?

通过用同步进程替换异步进程,我不是在本着集成测试的精神进行测试吗?我想我假设集成测试是指接近真实事物的测试。

最佳答案

好问题。

在单元测试中,这种方法是有意义的,但对于集成测试,您应该测试真实系统,因为它会在现实生活中运行。这包括任何异步操作及其可能产生的任何副作用 - 这是最有可能存在错误的地方,可能是您应该集中测试而不是将其排除在外的地方

我经常使用“waitFor”方法,轮询以查看是否已收到答案,如果没有收到则在一段时间后超时。这种模式的一个很好的实现是 JUnitConditionRunner,虽然你可以得到要点的特定于 java .例如:

conditionRunner = new JUnitConditionRunner(browser, WAIT_FOR_INTERVAL, WAIT_FOR_TIMEOUT);   

protected void waitForText(String text) {
    try {
        conditionRunner.waitFor(new Text(text));
    } catch(Throwable t) {
        throw new AssertionFailedError("Expecting text " + text + " failed to become true. Complete text [" + browser.getBodyText() + "]");
    }
}

关于testing - 在集成测试中,为了测试用同步进程替换异步进程是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396407/

相关文章:

nhibernate - FluentNhibernate 未使用 SQL CE 4.0 创建 Id 列作为身份

testing - 我应该在哪里使用 Monodevelop 在 fsharp 项目中进行测试?

android - 如何测试 Robospice GoogleHttpClientSpiceRequest?当前正在为 HttpRequestFactory 获取 NullPointerException

android - Robotium:如何在 Activity 启动之前更新首选项?

ruby-on-rails - Capybara(驱动程序 capybara-webkit)偶尔会失败,成功率超过 50%

mysql - NodeJS MySQL 将查询与多个模型查询的响应连接到一个 Controller 调用

python - 测试客户端如何工作

java - 在集成测试中重写@Value

javascript - ngRouter 到 ui-router

c# - 异步方法中的奇怪调试器行为