ExpectedException
অ্যাট্রিবিউট ব্যবহারের বিকল্প হিসাবে আমি মাঝে মাঝে আমার পরীক্ষার ক্লাসগুলির জন্য দুটি সহায়ক পদ্ধতি সংজ্ঞায়িত করি:
AssertThrowsException()
একটি প্রতিনিধি নেয় এবং দৃ as়ভাবে দাবি করে যে এটি প্রত্যাশিত বার্তা সহ প্রত্যাশিত ব্যতিক্রম ছোঁড়ে।
AssertDoesNotThrowException()
একই প্রতিনিধি গ্রহণ করে এবং দৃ it়ভাবে দাবি করে যে এটি কোনও ব্যতিক্রম ছুঁড়ে না।
এই জুড়িটি খুব কার্যকর হতে পারে যখন আপনি পরীক্ষা করতে চান যে এক ক্ষেত্রে ব্যতিক্রম ছুঁড়েছে, তবে অন্যটি নয়।
এগুলি ব্যবহার করে আমার ইউনিট পরীক্ষার কোডটি দেখতে দেখতে দেখতে এটির মতো হতে পারে:
ExceptionThrower callStartOp = delegate(){ testObj.StartOperation(); };
AssertThrowsException(callStartOp, typeof(InvalidOperationException), "StartOperation() called when not ready.");
testObj.Ready = true;
AssertDoesNotThrowException(callStartOp);
সুন্দর এবং ঝরঝরে হাহ?
আমার AssertThrowsException()
এবং AssertDoesNotThrowException()
পদ্ধতিগুলি নিম্নরূপে একটি সাধারণ বেস শ্রেণিতে সংজ্ঞায়িত করা হয়:
protected delegate void ExceptionThrower();
protected void AssertThrowsException(ExceptionThrower exceptionThrowingFunc, Type expectedExceptionType, string expectedExceptionMessage)
{
try
{
exceptionThrowingFunc();
Assert.Fail("Call did not raise any exception, but one was expected.");
}
catch (NUnit.Framework.AssertionException)
{
throw;
}
catch (Exception ex)
{
Assert.IsInstanceOfType(expectedExceptionType, ex, "Exception raised was not the expected type.");
Assert.IsTrue(ex.Message.Contains(expectedExceptionMessage), "Exception raised did not contain expected message. Expected=\"" + expectedExceptionMessage + "\", got \"" + ex.Message + "\"");
}
}
protected void AssertDoesNotThrowException(ExceptionThrower exceptionThrowingFunc)
{
try
{
exceptionThrowingFunc();
}
catch (NUnit.Framework.AssertionException)
{
throw;
}
catch (Exception ex)
{
Assert.Fail("Call raised an unexpected exception: " + ex.Message);
}
}