我有一个日志系统的包装器,它增加了远程日志记录等功能。
这些函数是class functions
,它们不会返回只打印到日志中的值并调用delegate method
。
我想单元测试每个函数调用正确的委托方法,但方法不返回任何值。有没有办法测试这个?
由于
答案 0 :(得分:1)
尝试创建Logger协议以实现RealLogger和MockLogger
protocol Logger {
func log(string: String)
}
class RealLogger: Logger {
func log(string: String) {
print(string)
}
}
class MockLogger: Logger {
var isLogCalled = false
var logStringParameter:String? = nil
func log(string: String) {
isLogCalled = true
logStringParameter = string
}
}
由于你有一个带有类函数的类,你需要有一个静态var引用来在测试时替换它
class MyClass {
private static var logger: Logger? = RealLogger()
class func setLogger(logger: Logger) {
self.logger = logger
}
class func logAndCallDelegate() {
logger?.log(string: "my log message")
// delegate call
}
}
更改您的真实记录器并使用模拟进行测试
class MyClassTests: XCTestCase {
var logger: MockLogger!
override func setUp() {
super.setUp()
logger = MockLogger()
MyClass.setLogger(logger: logger)
MyClass.logAndCallDelegate()
}
func testLogger() {
XCTAssertTrue(logger.isLogCalled)
XCTAssertEqual(logger.logStringParameter, "my log message")
}
}
您可以应用相同的方法来测试委托调用。
如果您不想在MyClass中实例化RealLogger,您可以使用LoggerLocator对象提供RealLogger,并在测试时更改LoggerLocator中的记录器实现。
答案 1 :(得分:0)
尝试使用
readline()
此外,您可以创建一个假代理来测试回调。