كيفية وحدة اختبار كائنين ليست متساوية في دائرة الرقابة الداخلية شكتيستكيس

StackOverflow https://stackoverflow.com//questions/21000189

سؤال

أنا جديدة إلى حد ما لاختبار وحدة ، وفي دائرة الرقابة الداخلية على وجه الخصوص

لدي حالة اختبار يجب أن تنجح إذا رأيت كائنين غير متساويين

لا يمكنني العثور على طريقة تعطيني ذلك ، إلى جانب طلب الاختبار للفشل عند التحقق من أنها متساوية.

أنا لا ترغب في الحصول على اختبار تفشل للكائنات التي ليست متساوية,

أتمنى أن ينجح الاختبار إذا لم تكن الكائنات متساوية.

الطريقة التي سوف تحقق ذلك ?

هذه هي طريقة الاختبار الخاصة بي:

-(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");

كل هذا يتوقف على نوع المساواة التي تختبرها.

نصائح أخرى

وحدات الماكرو شكتيست عموما دعم الظروف الحقيقية ، وليس كاذبة منها.لذلك بينما يمكنك أن تقول

XCTAssertEqualObjects(server1, server);

لاختبار المساواة ، و

XCTAssertEqual(server1, server);

لاختبار الهوية ، ليس من السهل عكسها.عليك أن تقع مرة أخرى على زكتاسيرترو / فالس ، وهي ليست جيدة لأنها ببساطة يخبرك أن التأكيد فشل ، ولكن لا اقول لكم القيم إلا إذا كنت تضمينها صراحة في الرسالة:

XCTAssertFalse([server1 isEqual:server], @"Oops, both objects equal %@", server);

هذا هو المكان الذي تكون فيه المطابقات الأكثر تعبيرا في متناول اليد, وجدت في أطر مثل أوشامكريست, كيوي, توقع والأرز.في أوشامكريست ، على سبيل المثال ، يمكن أن تتكون المطابقات من المطابقات الأخرى ، حتى تتمكن من التفاف isNot(…) حول أي المنظر.لاختبار أن الخادم 1 والخدم 2 هما لا على قدم المساواة ، انها

assertThat(server, isNot(equalTo(server1))));

وبالمثل ، لاختبار ذلك الخادم 1 و الخادم 2 هي لا متطابقة ، انها

assertThat(server, isNot(sameInstance(server1))));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top