質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

822閲覧

UnitTestで、正しいラベルが表示されているか確認したい。

kazuki_user

総合スコア147

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/09/15 01:52

編集2020/09/15 01:54

## やりたいこと

UnitTestで、正しいラベルが表示されているか確認したい。
ですが、let cell =の行で長文のエラーがでました。

swift

1 // 正しいラベルが表示されているか確認 2 func testLabelTxt() { 3 let vc = SearchRootVC() 4 5 let testItems = [["key1": "item1", "key2": "item2"]] 6 vc.repo = testItems 7 8 let cell = vc.tableView(vc.tableView, cellForRowAt: IndexPath(row: 0, section: 1)) // この行で長文のエラー。 9 XCTAssertEqual(cell.textLabel?.text, "item1") 10 }

## エラー

イメージ説明

## 試したこと

こちらを参考に、「dequeueReusableCellが、Identifierを持っているか確認」してみましたが、
(しかし、ラベル表示とは関係なさそうでした。)

Value of type 'SearchRootVC' has no member 'reuseIdentifier'のエラーがでました。

reuseIdentifierの箇所に何を記述すべきか教えて頂きたいです。

swift

1 // dequeueReusableCellが、Identifierを持っているか確認 2 func testTableViewCellHasReuseIdentifier() { 3 let vc = SearchRootVC() 4 5 let cell = vc.tableView(vc.tableView, cellForRowAt: IndexPath(row: 0, section: 0)) as? SearchRootVC 6 let actualReuseIdentifer = cell?.reuseIdentifier // Value of type 'SearchRootVC' has no member 'reuseIdentifier' 7 let expectedReuseIdentifier = "RepositoryCell" 8 XCTAssertEqual(actualReuseIdentifer, expectedReuseIdentifier) 9 }

## 参考サイト

UITableViewのUnitTestを書く

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーメッセージに答えが書いてますよ。上から2行目、"...must register a nib or .."のところです。

このエラーメッセージが意味するところは、自分がデザインしたカスタムUITableViewCellを cellForRow(at indexPath: IndexPath)で取り出して使うには、あらかじめUITableViewのfunc register(_ nib: UINib?, forCellReuseIdentifier identifier: String)を呼び出して、あらかじめ作成しているUITableViewCellのnibファイルを登録しておく必要があると言うことです。

(この種のミスは文法的にはエラーにならないので、実行時エラーになってしまうのです。こういうのをビルド時に検出できないのがUIKitの欠点といえば欠点で、SwiftUIが開発された動機の一つなんでしょうが。。。)

なお、忘れがちですが、nibファイルを作るとき、reuse identifierという入力欄があるので、そこにidentifier(この場合はRepositoryCell)を指定しておく必要があります。
多分こんな感じに、SearchRootVCの実装など、前後関係がわからないので別のエラーが出るかも知れませんが、少なくとも上のエラーは無くなるはずです。

swift

1 // 正しいラベルが表示されているか確認 2 func testLabelTxt() { 3 let vc = SearchRootVC() 4 let nib = UINib(named: "<nibファイルの名前>", bundle: nil) // UnitTestなのでbundleはnilだとダメかも。テスト対象アプリのMainBundleを明示的に指定しないとかも 5 // その場合は 6 // let bundleForTested = Bundle(for: type(of: SearchRootVC)) 7 // let nib = UINib(named: "<nibファイルの名前>", bundle: bundleForTested) 8 vc.tableView.register(nib, forCellReuseIdentifier: "RepositoryCell") 9 10 let testItems = [["key1": "item1", "key2": "item2"]] 11 vc.repo = testItems 12 13 let cell = vc.tableView(vc.tableView, cellForRowAt: IndexPath(row: 0, section: 1)) // この行で長文のエラー。 14 XCTAssertEqual(cell.textLabel?.text, "item1") 15 }

投稿2020/09/27 01:55

ponpoko1968

総合スコア84

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問