मैं इकाई परीक्षण (एसयूटी) द्वारा निर्भरता पर एक विधि को बुलाया जा सकता है, यह जांचने की कोशिश कर रहा हूं।एसओटी का कार्य करने के लिए मास्क के साथ यूनिट परीक्षण कार्य समांतर लिबरै
- वंचितता IFoo है।
- आश्रित वर्ग आईबार है।
- आईबार को बार के रूप में लागू किया गया है।
- बार IFoo पर एक नया (System.Threading.Tasks।) कार्य में प्रारंभ() को कॉल() को बार उदाहरण पर प्रारंभ() कहा जाता है।
यूनिट टेस्ट (MOQ): बार के रूप में Ibar की
[Test]
public void StartBar_ShouldCallStartOnAllFoo_WhenFoosExist()
{
//ARRANGE
//Create a foo, and setup expectation
var mockFoo0 = new Mock<IFoo>();
mockFoo0.Setup(foo => foo.Start());
var mockFoo1 = new Mock<IFoo>();
mockFoo1.Setup(foo => foo.Start());
//Add mockobjects to a collection
var foos = new List<IFoo>
{
mockFoo0.Object,
mockFoo1.Object
};
IBar sutBar = new Bar(foos);
//ACT
sutBar.Start(); //Should call mockFoo.Start()
//ASSERT
mockFoo0.VerifyAll();
mockFoo1.VerifyAll();
}
कार्यान्वयन:
class Bar : IBar
{
private IEnumerable<IFoo> Foos { get; set; }
public Bar(IEnumerable<IFoo> foos)
{
Foos = foos;
}
public void Start()
{
foreach(var foo in Foos)
{
Task.Factory.StartNew(
() =>
{
foo.Start();
});
}
}
}
Moq अपवाद:
*Moq.MockVerificationException : The following setups were not matched:
IFoo foo => foo.Start() (StartBar_ShouldCallStartOnAllFoo_WhenFoosExist() in
FooBarTests.cs: line 19)*
क्या कोई विशेष कारण है कि 'IFoo' के सरल मॉक कार्यान्वयन को न लिखें और इसके बजाय इसका उपयोग करें? –