Skip to content

Latest commit

 

History

History
104 lines (59 loc) · 4.41 KB

03_2020-12-03.md

File metadata and controls

104 lines (59 loc) · 4.41 KB

2020 12 03 第三次聚會

Sung-Hao Lin下午9:07

.NET

你下午9:10

https://github.com/EssentialStudyGroup/essential-feed-case-study/blob/main/Documents/Networking/02.md

Sung-Hao Lin下午9:38

A ? B : C ? D : E

Te Cheng Hung下午9:41

剛剛的 Log 問題,用這個架構可以解決(不使用 decorator pattern)嗎?https://youtu.be/GzFD7R_CI04

Sung-Hao Lin下午9:43

[] + [] + []

Lee Paul下午9:53

https://www.notion.so/UML-Class-Diagram-e50ee178de9546d180d86f0065f64a48

Lee Paul下午9:56

https://www.books.com.tw/products/0010753373

Lee Paul下午10:27 我有貼 FeedItemsMapper 和 FeedUIComposer 在 notion 的檔案上, 大家有興趣可以直接比較一下。

Lee Paul下午10:44

private func makeSUT(factory: RealmFeedStore.RealmFactory? = nil) -> FeedStore {
        let f = factory == nil ? defaultRealmFactory() : factory!
        let sut = RealmFeedStore (factory: f)
        trackForMemoryLeaks(sut)
        return sut
    }
    
    private func defaultRealmFactory() -> RealmFeedStore.RealmFactory {
        return {
            try! RealmSwift.Realm(configuration: self.unitTestRealmConfiguration())
        }
    }
    
    private func unitTestRealmConfiguration() -> RealmSwift.Realm.Configuration {
        return RealmSwift.Realm.Configuration(inMemoryIdentifier: "UnitTestInMemoryRealm")
    }

Dan, [Dec 3, 2020 at 11:19:42 PM]:

老師這邊的定義,會讓我以為 integration test,要包含兩個 production code的 component 🙈:

There are many different types of tests, i.e., unit, integration, performance, UI, etc. but no agreed definitions in the industry.

In this course, we will define an integration test as any test that checks two or more components collaborating without mocks, stubs, spies, or any other test double. That is opposed to a single behavior being checked by a single component in a unit or isolated test.

Dan, [Dec 3, 2020 at 11:20:27 PM]:

但之前分享的筆記中的定義,就比較像剛剛討論的:

整合測試的定義:「整合測試是對一個工作單元進行測試,而這個測試對被測試的單元並沒有完全的控制,而是使用該單元一個或多個真實依賴的相依物件,例如時間、網路、資料庫、執行緒或亂數產生器等等。」

chihyin, [Dec 3, 2020 at 11:31:46 PM]:

我的理解是: 整合測試=測試component(內含多個unit)是否運作如預期

而剛剛說的有I/O的狀況,我認為也是包含在測試component(多個unit)的範疇。

chihyin, [Dec 3, 2020 at 11:32:21 PM]:

有錯請鞭

Dan, [Dec 3, 2020 at 11:41:01 PM]: 如果以課堂這個CodableFeedStoreTests為例,大家會覺得是 integration tests 嗎?🤔 (sut 是 CodableFeedStore,但依賴真實的物件(FileManager))

https://github.com/essentialdevelopercom/essential-feed-case-study/blob/fe23218c830812a9eff2b7a75eb4e1f5ddc2aef3/EssentialFeed/EssentialFeedTests/Feed%20Cache/CodableFeedStoreTests.swift

Dan, [Dec 3, 2020 at 11:44:13 PM]:

我之前以為是 unit test,因為在課程後面才提到 integration test,加上上面提到的,老師自己的定義 😆

Paul Lee, [Dec 4, 2020 at 12:11:57 AM]:

老師的定義中有提到整合測試的一個條件是不能有偽物件(without mock, stubs, spies, test doubles), 都要相依真實的物件, 筆記中對整合測試的定義也有使用真實相依的物件。我的理解是使用到真實相依的物件, 通常速度會慢, 就算是整合測試。以這個例子,測試最後的相依是 testSpecificStoreURL , 如果這個 URL 能被換成類似 CoreData 的 /dev/null 或 Realm 的 RealmSwift.Realm.Configuration(inMemoryIdentifier: "UnitTestInMemoryRealm”), 加速測試, 但卻不是測試 app 實際運行的強況, 我就會認為是單元測試。

Dan, [Dec 4, 2020 at 12:17:59 AM]:

感謝大家的回覆,對定義又能更清楚去分辨了 🙏,只是 fileManager 要再研究一下有沒有類似的實作👍

Paul Lee, [Dec 4, 2020 at 12:19:44 AM]:

我的理解是 /dev/null, UnitTestInMemoryRealm, URL Protocol Stubbing 這些東西是 framework 提供用來方便寫 unitest 的 (加速測試用的), 不總是都會有. 沒有的時候, 如果要寫 unit test 就只能用 protocol based mock, 但這會把 prod. code 變複雜, 多加了為了替換真實相依物件和測試替身的 protocol. 算是 trad-off, 要看自己決定要不要寫 unit test 或是直接依賴真實物件上 CI 跑 integration test 就好.