単体テストの実行がコードの通常の実行とは異なる動作をしているという奇妙な状況に遭遇しています。
特に、JSONModel というライブラリを使用しており、JSON 文字列からオブジェクトを逆シリアル化しようとしているときに、実行中のテスト ケースをステップ実行するときに、特に 1 つの行が問題を引き起こしています。
if ( [[property.type class] isSubclassOfClass:[JSONModel class]] ) ...
この行の前 (または後) にブレークポイントを置いて実行すると:
expr [[property.type class] isSubclassOfClass:[JSONModel class]]
...デバッガーでは\x01
、値 (つまり true) として出力されますが、実際に命令ポインターをステップ実行すると、false のように動作し、代わりに else ブロックに入ります。もう一度、式をデバッガーに再度入力すると、それでも true として表示されます。
誰かが以前に同様の動作を見たことがあり、何が間違っている可能性があるかについて何か提案があるかどうか興味があります. Xcode にテスト用の内部ココア クラスの実装が異なる場合を除き、別の定義を含めていないことは確かです。
更新:さらに奇妙な証拠がいくつかあります:NSLog
実行がどのように物事を見ているかを理解するために、いくつかのステートメントを追加しました。ログインするproperty.type.superclass
と、JSONModel
(予想どおり)戻ってきます。ただし、ログproperty.type.superclass == [JSONModel class]
に記録するとfalse
!
私にとって、これは、単体テストの実行が見ている JSONModel が、実行時に見ている別の JSONModel クラスであることを示しています (そして、それが見るべきもの)。しかし、それがどのように起こっているのか、私にはわかりません。
これは、前方クラス宣言などによって引き起こされる可能性がありますか?