2017-01-31 2 views
0

Ich habe eine Struktur (teilweise)Swift 3 Unit Test wirft Fehler kompilieren

struct Event : JSONSerializable, Glossy { 
    let name : String 
    let start : String 
    private var startTimeZone: String 
    let finish : String 
    private var finishTimeZone: String 

dass "Can not Wert 'Typ' auf 'Typ' konvertieren", wenn sie von Unittest genannt:

func testReal() { 
    let event : Event = Event() 
    let editor = EventEditor(forEvent: Event()) 
    XCTAssertNotNil(editor) 
} 

wirft Fehler kompilieren: nicht Wert vom Typ ‚Ereignis‘ zu erwarten arguement Typ ‚Ereignis‘

EventEditor ist

umwandeln kann:

import Foundation 

class EventEditor { 
let event : Event 

    init(forEvent event: Event) { 
     self.event = event 
    } 
} 

Aber wenn von Produkt (aka außerhalb, wenn Unit-Tests) aufgerufen wird, funktioniert es gut ohne Fehler oder Probleme. JSONSerializable - Helfer Erweiterungen zu/von JSON Glossy - Cocoapod für JSON Parsing zu konvertieren.

Ich habe versucht, erstellt eine abgespeckte Version von Ereignisse und das Hinzufügen von Stücken (zB JSONSerializable, Glossy)

Kann jemand empfehlen, warum dies nicht in XCTest funktionieren würde, aber in anderem Code funktioniert?

+0

Haben Sie '@testable import nameOfYourProject' unter' Import XCTest'? – Honey

+0

ist nicht diese Zeile: 'let event: Event = Event()' gibt Ihnen einen Fehler? Sie ** ** ** geben ihm keinen Wert für seine Parameter, Sie sollten initialisieren mit 'Event (Name:" John ", Start:" 1. Mai ", ...)' ODER Ihre Struktur könnte Standardwerte wie in 'haben Let Name: String = "" Lassen Sie starten: String = "Jan 1st", ... 'geben Sie allen Eigenschaften der Struktur einen Standardwert, so dass Sie' Event() 'tun können, die im Grunde mit den Standardwerten – Honey

+0

auch sehen würde [hier] (http://stackoverflow.com/questions/39419707/cannot-convert-value-of-type-x-to-expected-argument-type-x) – Honey

Antwort

2

Sehr wahrscheinlich haben Sie die Datei, die die Event-Struktur enthält, sowohl zu Ihrem Hauptziel als auch zu Ihrem Testziel hinzugefügt.

Um zu prüfen, ob dies der Fall ist, wählen Sie die Datei im Projektnavigator aus, zeigen Sie rechts den Bereich Dienstprogramme an und überprüfen Sie die Zielmitgliedschaft. Wenn Ihr Testziel markiert ist, deaktivieren Sie es.

Fügen Sie in Ihrer XCTest-Datei am Anfang der Datei @testable import YourMainTargetNameHere hinzu.