如何测试 N 秒后是不是没有调用方法?

Posted

技术标签:

【中文标题】如何测试 N 秒后是不是没有调用方法?【英文标题】:How to test if a method isn't called after N seconds?如何测试 N 秒后是否没有调用方法? 【发布时间】:2016-03-16 20:49:48 【问题描述】:

我正在编写一些测试,当应用收到请求时,我需要检查“没有任何反应”,该请求必须被完全忽略。知道请求是否被忽略的方法是检查两个在请求发送后什么都没有收到的委托。

我不知道如何测试这个:

func testIgnore() 

    sut.message() 
        //this doesn't have to be called if test succeed
    

    sut.appointment() 
        //this doesn't have to be called if test succeed
    

    stub(isHost("test.com"))  (request: NSURLRequest) -> OHHTTPStubsResponse in
        let data = "specific data".dataUsingEncoding(NSUTF8StringEncoding)
        return OHHTTPStubsResponse(data: data!, statusCode: 200, headers: nil)
    


有什么想法吗??我完全迷失了,因为我不能使用期望,因为如果期望超时,那是一个失败的测试,而这种情况将是一个成功的测试......

我需要等待例如 3 秒,如果块没有被调用,那就是成功

【问题讨论】:

【参考方案1】:

在您希望不被调用的两个方法中添加XCTFail(),这样如果它们被调用,您的测试将失败。

然后简单地使用XCTest方法进行异步测试等待3秒,例如:

let exp = self.expectationWithDescription("3 seconds passed")
dispatch_after(…3 seconds…, dispatch_get_main_queue()) 
  exp.fulfill()

self.waitForExpectationsWithTimeout(4)

⚠️ 这是伪代码,因为我在我的 iPhone 上,所以很难在那里编写长代码,而且我可能在方法名称中做了一些拼写错误。根据需要进行调整。


PS:我不明白这个问题与OHHTTPStubs 有什么关系,顺便说一句。您的所有问题都是关于“如何测试 N 秒后是否没有调用方法”......

【讨论】:

只是改了标题,你是对的......这样更有意义。

以上是关于如何测试 N 秒后是不是没有调用方法?的主要内容,如果未能解决你的问题,请参考以下文章

java启用一个倒计时任务

RSpec:如何测试一个方法是不是被调用?

Vue Test Utils / Jest - 如何测试是不是在组件方法中调用了类方法

如何安全地测试一个方法是不是可以通过 NSInvocation 被调用

如何检查代码库中是不是有任何方法调用

如何测试 Laravel 5.4 中的“创建”事件是不是调用了 Eloquent 模型方法?