समाधान प्रदान करना यूआई विधि या संबंधित विधियों के साथ बहुत आसान होगा। यह भी देखकर TestMethod (ओं) अपूर्ण विधियों की मदद कर सकता है।
यदि मैं समझता हूं कि आपका परीक्षण उद्देश्य अलग-अलग क्लिक संभावनाओं पर क्या होता है यह निर्धारित करना है?
आप अपने वास्तविक तरीका है कि MessageBox
चलाता है Inversion of Control और इस तरह Dependency Injection का उपयोग कर सेट कर सकते हैं:
public class ClassUnderTest
{
private static Func<string, string, MessageBoxButtons, DialogResult>
_messageBoxLocator = MessageBox.Show;
public static Func<string, string, MessageBoxButtons, DialogResult>
MessageBoxDependency
{
get { return _messageBoxLocator; }
set { _messageBoxLocator = value; }
}
private void MyMethodOld(object sender, EventArgs e)
{
if (MessageBox.Show("test", "", MessageBoxButtons.YesNo) ==
System.Windows.Forms.DialogResult.Yes)
{
//Yes code
AnsweredYes = true;
}
else
{
//No code
}
}
public bool AnsweredYes = false;
public void MyMethod(object sender, EventArgs e)
{
if (MessageBoxDependency(
"testText", "testCaption", MessageBoxButtons.YesNo)
==
System.Windows.Forms.DialogResult.Yes)
{
//proceed code
AnsweredYes = true;
}
else
{
//abort code
}
}
}
और फिर परीक्षा पद्धति (याद शीर्ष पर using Microsoft.VisualStudio.TestTools.UnitTesting;
शामिल करने के लिए) इस तरह होगा:
[TestMethod]
public void ClassUnderTest_DefaultAnsweredYes_IsFalse()
{
var classUnderTest = new ClassUnderTest();
Assert.AreEqual(false, classUnderTest.AnsweredYes);
}
[TestMethod]
public void MyMethod_UserAnswersYes_AnsweredYesIsTrue()
{
//Test Setup
Func<string, string, MessageBoxButtons, DialogResult>
fakeMessageBoxfunction =
(text, caption, buttons) =>
DialogResult.Yes;
//Create an instance of the class you are testing
var classUnderTest = new Testing.ClassUnderTest();
var oldDependency = Testing.ClassUnderTest.MessageBoxDependency;
Testing.ClassUnderTest.MessageBoxDependency = fakeMessageBoxfunction;
try
{
classUnderTest.MyMethod(null, null);
Assert.AreEqual(true, classUnderTest.AnsweredYes);
//Assert What are you trying to test?
}
finally
{ //Ensure that future tests are in the default state
Testing.ClassUnderTest.MessageBoxDependency = oldDependency;
}
}
तो आप क्या अपने नियंत्रण करता है, जब वे इनमें से प्रत्येक पर क्लिक करें परीक्षण करना चाहते हैं? या टेस्ट में एक ब्लॉकिंग संदेशबॉक्स संवाद है यह देखने के लिए कि मध्यम स्तर परीक्षण करने के लिए सुरक्षित है या नहीं? – Maslow