2014-06-18 1 views
4

У меня возникли проблемы при добавлении модульных тестов для Swift проекта шахты, поэтому я создал свежий тест Xcode проект с урезанной версией моего класса:Как настроить модульные тесты в Swift?

class SimpleClass { 
    let x: String 

    init(x: String) { 
     self.x = x 
    } 

    convenience init(dict: Dictionary<String, String>) { 
     self.init(x: dict["x"]!) 
    } 
} 

Затем я создал простой тест:

import XCTest 
import TestProblem 

class TestProblemTests: XCTestCase { 
    func testExample() { 
     // This is an example of a functional test case. 
     XCTAssertEqual(SimpleClass(x: "foo"), SimpleClass(dict: ["x": "foo"])) 
    } 

} 

мне пришлось импортировать сам (import TestProblem) проект, чтобы исправить ошибки неразрешенных идентификаторов для SimpleClass.

Однако, когда я пытаюсь запустить тесты, я получаю следующее сообщение об ошибке компилятора:

Could not find an overload for 'init' that accepts the supplied arguments 

Что я здесь отсутствует? Вызовы init отлично работают за пределами вызова XCTAssertEqual, даже в тестовом файле.

по наитию, я также пытался:

let x = SimpleClass(x: "foo") 
    let y = SimpleClass(dict: ["x": "foo"]) 
    XCTAssertEqual(x, y) 

Когда я делаю это, я получаю эту ошибку:

Cannot convert the expression's type 'Void' to type 'SimpleClass' 

ответ

2

Вы пытаетесь определить ваши параметры явно? Например:

let x : SimpleClass = SimpleClass(x: "foo") 
let y : SimpleClass = SimpleClass(dict: ["x": "foo"]) 
XCTAssertEqual(x, y) 
+0

Хм, это исправляет проблему. Интересно, почему нужны явные аннотации. – Bill

+0

Вы правы, как правило, он должен работать без явных аннотаций. Это похоже на ошибку, так что вы можете сообщить об этом яблоку. Xcode находится в бета2, поэтому он еще не идеален. – jaumard

+0

Спасибо за быстрый ответ - я расскажу о проблеме. – Bill

Смежные вопросы