2017-01-31 54 views
0

我有一個結構(部分)斯威夫特3單元測試拋出編譯錯誤「無法值‘類型’轉換成‘類型’」

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

,從單元測試調用時:

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

拋出編譯錯誤: 無法將類型「事件」預期arguement類型「事件」

EventEditor的值是:

import Foundation 

class EventEditor { 
let event : Event 

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

但是,如果從產品調用(又稱外部如果單元測試)它工作得很好,沒有錯誤或問題。 JSONSerializable - 從JSON轉換到JSON的輔助擴展 Glossy - 用於json解析的cocoapod。

我試圖創建活動並添加件的精簡版(例如JSONSerializable,有光澤)

任何人都可以說明爲什麼這不會在XCTest工作,但在其他代碼的工作?

+0

你有在'Import XCTest'下有'@testable import nameOfYourProject'嗎? – Honey

+0

不是這一行:'let event:Event = Event()'給你一個錯誤?你是不是**給它的任何參數值,你應該用'Event(name:「John」,start:「May 1st」,...)初始化'或者你的結構可以有'讓name:String =「」let start:String =「Jan 1st」,...'給出struct的所有屬性默認值,這樣你就可以執行'Event()',它基本上初始化爲默認值 – Honey

+0

也見[這裏](http://stackoverflow.com/questions/39419707/cannot-convert-value-of-type-x-to-expected-argument-type-x) – Honey

回答

2

很可能您已將包含Event結構的文件添加到您的主目標和測試目標。

要檢查是否屬於這種情況,請在項目導航器中選擇該文件,然後顯示右側的實用程序窗格,然後選中目標成員。如果您的測試目標被選中,取消選中它。

在您的XCTest文件中,將@testable import YourMainTargetNameHere添加到文件的頂部。

相關問題