質問: swift)でコアデータをユニットテストするための回避策 私はまだプログラミングにかなり慣れていませんが、私の最初のアプリは最近承認され、現在appstoreで販売されています。私のアプリはcoredataを使用しており、swiftで記述されています。最初の問題が発生した後、単体テストなしでアプリを作成することにしました。ここで、回帰を防ぐために単体テストを実装したいと思います。管理対象オブジェクトは、nsmanagedobjectサブクラスのクラスメソッド内に作成され、appdelegateで宣言したグローバル変数「context」を使用して、appleのデフォルトコードで作成されたnsmanagedobjectcontextを格納します。グローバル変数は一般的に推奨されていないことは知っていますが、このアプローチは私にとって最も理にかなっており、記述が簡単で、アプリ自体のバグやその他の問題を許容していません。残念ながら、これにより単体テストが困難になります。テストターゲット内にcoredataスタックを作成するためにいくつかの異なるアプローチを試しましたが、アプリコードをたくさん書き直さないと、何も機能しないようです。テスト可能にするためだけにそれをしたくはありません。 quick/nimbleやmagicalrecordなどのフレームワークの使用を検討しましたが、それが私の問題にどのように役立つかわかりません。私は回避策を見つけましたが、これが悪い考えだと人々が考えているかどうか興味があります。プライマリターゲット(テスト以外)にtestingclassというクラスを作成しました。最初のviewcontrollerのviewdidappearでは、starttestsメソッドを呼び出します。 testingclassはstrait swiftで記述されており、テストフレームワークはありません。falseと思われるifステートメントがいくつかあります。trueの場合、配列に文字列を追加します。テストが完了し、配列数が0より大きい場合、内容が出力されて中止されます。アップデートを出荷する準備ができるまで、これを使用する予定です。そうである場合は、testingclassを無効にして、その呼び出しを削除します。誰かがこのようなことをしたことがあるかどうか私は興味があります。 「正しい」方法でテストを行う方法を考えればよいでしょうか。
回答: 非常に経験豊富なプログラマーであっても、複雑なシステムフレームワークに依存するテストコードを単体テストすることは非常に難しい場合があります。私はあなたが最初にできる限り多くの他のコードをユニットテストしようとします。(また、デバッグバージョンとリリースバージョンの間で手動で変更する必要があるコードを絶対に入れないでください!どこかで間違いを犯すことは避けられません)