ile yöntem çağrısının beklenmesini bekler. Yöntem çağrısı, Xift ve XCTest kullanarak nasıl beklenir?XCTest,
OCMock'ı kullanabilirim, ancak resmi olarak hızlı bir şekilde desteklemiyorlar, bu nedenle çok fazla seçenek yok.
ile yöntem çağrısının beklenmesini bekler. Yöntem çağrısı, Xift ve XCTest kullanarak nasıl beklenir?XCTest,
OCMock'ı kullanabilirim, ancak resmi olarak hızlı bir şekilde desteklemiyorlar, bu nedenle çok fazla seçenek yok.
OCMock'un Swift'i (veya OCMockito'yu) desteklemediğini söylediğin gibi, şimdi gördüğüm tek yol, elle yuvarlanmış bir alay oluşturmak. Hızlı bir şekilde, bu bir yöntem içinde iç sınıflar oluşturabileceğiniz, ancak hala alaycı bir çerçeve kadar kullanışlı değil, çünkü bu biraz daha az acı verici.
İşte bir örneğiniz var. Kod kendiliğinden açıklayıcıdır, yapmam gereken tek şey (aşağıdaki EDIT 1'e bakınız) çalışmasını sağlamak için kullanacağım sınıfları ve yöntemleri kamuya açıklamaktır (test sınıflarının Aynı uygulamanın kod modülü - buna bir çözüm bulmaya çalışacağız).
EDIT 1 2016/4/27: "@testable import ModuleName" özelliğini kullanabildiğinizden, sınamak istediğiniz sınıfların public olarak bildirilmesi gerekli değildir.
testi:
import XCTest
import SwiftMockingPoC
class MyClassTests: XCTestCase {
func test__myMethod() {
// prepare
class MyServiceMock : MyService {
var doSomethingWasCalled = false
override func doSomething(){
doSomethingWasCalled = true
}
}
let myServiceMock = MyServiceMock()
let sut = MyClass(myService: myServiceMock)
// test
sut.myMethod()
// verify
XCTAssertTrue(myServiceMock.doSomethingWasCalled)
}
}
MyClass.swift
public class MyClass {
let myService: MyService
public init(myService: MyService) {
self.myService = myService
}
public func myMethod() {
myService.doSomething()
}
}
MyService.swift
public class MyService {
public init() {
}
public func doSomething() {
}
}
Sahte sınıf içinde sadece "doSomethingWasCalled" için bir değişken oluşturmak ve sonra çağrılmasını beklediğim her yöntem için bir iddiaya sahip olmak istemem. Ben mock class yöntemi ile beklenti yerine getirmek ve daha sonra test waitForExpectationsWithTimeout çağrısı ile motation sınıfının dışında bir değişken bildirmek gibi bir şey daha istedim. Ama bu işe yaramıyor, test derlemiyor (veya bana "SourceKitService Crashed" hatası veriyor, gerçekten hatırlamıyor ve şu anda test edemiyorum çünkü kodum başka bir şey yüzünden derleme değil) uygulanması. –
Ayrıca, testte yaptığınız gibi bir yöntemi geçersiz edemiyorum. Aynı hata, "SourceKitService Crashed". –
AFAIK XCTestExpectation, asenkron test için kullanılıyor, bunu istemediğiniz sürece kullanmak için bir neden göremiyorum. Bu yöntemi geçersiz kılma hakkında, testinizde kullanmak istediğiniz yöntemleri ve sınıfları herkese açıkladığınızdan emin olun - yanıtımın kodu Xcode'ta benim için çalışır. – e1985
[Swift Mocking] olası yinelenen (http://stackoverflow.com/ sorular/24174130/taklitçi-hızlı) – ColinE
Benim sorumdan bu soruya bir fark, bir yöntem çağrısı beklemek istiyorum ve sadece bir yöntem alayım. –