単体テスト方法2つのオブジェクトはIOS XCTestCaseで等しくない
-
20-12-2019 - |
質問
私は単体テストにかなり新しい、そして特にiOSでは
私は2つのオブジェクトが等しくないと思われる場合に成功するべきテストケースがあります
私は、それらが等しいことを確認することに失敗することを要求することを要求するのに加えて、私にそれを与える方法を見つけることができません。
私は、等しくないオブジェクトに対してテストに失敗したくない、
オブジェクトが等しくない場合はテストを成功させることを望みます。
どの方法がそれを達成するか?
これは私のテスト方法です:
-(void)testServerProtocolSetting{
ServerProtocol *server = [ServerProtocol sharedInstance];
id stub = [OCMockObject mockForClass:[ServerProtocol class]];
ServerProtocol *server1 = server;
[[stub expect]isNULL];
[ServerProtocol setSharedInstance:stub];
[stub verify];
server = [ServerProtocol sharedInstance];
XCTAssertEqualObjects(server1, server, @"server and server1 are not equal");
.
}
解決
実際にどのように起こるのかをテストするだけで、テストを過成す必要はありません:
XCTAssertFalse(server1 == server, @"The objects should not be equal");
.
オブジェクト上の==
演算子がポインタの平等をテストするため、server1
がserver2
と同じオブジェクトである場合は、必要に応じて失敗します。
あるいは
XCTAssertTrue(server1 != server, @"The objects should not be equal");
.
isEqual
を使用して行われたような異なるタイプの平等をテストしたい場合は、オブジェクトの属性が同じでも同じインスタンスではない場合でも、オブジェクトの属性が同じであっても、
XCTAssertFalse([server1 isEqual:server], @"The objects should not be equal");
.
それはすべてあなたがテストしているどんな種類の等式に依存しています。
他のヒント
XCTESTマクロは一般に、偽のものではなく真の条件をサポートします。だからあなたは
と言うことができますXCTAssertEqualObjects(server1, server);
.
平等をテストし、
XCTAssertEqual(server1, server);
.
身元をテストするには、それらを反転するのは簡単ではありません。XCTASSETTRUE / FALSEに戻る必要があります。
XCTAssertFalse([server1 isEqual:server], @"Oops, both objects equal %@", server);
.
これは、Ochamcrest、Kiwi、Eppinga、およびCedarのようなフレームワークにあるフレームワークで見つかった、より表現性のあるマッチャーが便利です。たとえば、ochamcrestでは、マイッチャーは他のマッチャーから作成できますので、任意のマッチャーの周りにisNot(…)
をラップできます。server1とserver2がでないことをテストするには、
assertThat(server, isNot(equalTo(server1))));
.
同様に、Server1とServer2がではないことをテストするには、
です。assertThat(server, isNot(sameInstance(server1))));
.