ฉันค่อนข้างใหม่ในการทดสอบหน่วยใน C # และเรียนรู้การใช้ Moq ด้านล่างเป็นชั้นเรียนที่ฉันพยายามทดสอบ
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
ด้านล่างนี้เป็น TestClass ของฉัน:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
ฉันได้รับข้อยกเว้นต่อไปนี้:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
ฉันแค่ต้องการตรวจสอบว่ามีการเรียกวิธีการ "MyMethod" หรือไม่ ฉันพลาดอะไรไปรึเปล่า?
ขออภัย .. ฉันแก้ไขคำถามของฉัน ..
—
user591410
คุณกำลังติดตามถูกต้อง แต่มีข้อบกพร่องในรหัสที่โพสต์ มันจะไม่คอมไพล์ด้วยเคสของ Someclass, โมฆะส่งคืนบน DoSomething หลังจากนั้นคุณต้องเข้าถึงสาธารณะจากนั้นทำให้ DoSomething เสมือนจริง ในระยะสั้นคุณอาจมีข้อผิดพลาดในรหัสการผลิตของคุณด้วย
—
TrueWill
ขอบคุณสำหรับคำตอบของคุณ ฉันตั้งข้อโต้แย้งที่ไม่ถูกต้องขณะตั้งค่าวิธีการจำลอง ..
—
591410
"ไม่มีการตั้งค่าที่กำหนดค่า" อาจทำให้เข้าใจผิด คุณไม่จำเป็นต้องตั้งค่าลักษณะการทำงานสำหรับวิธีการที่จะถูกเรียก และอย่าลืมเรียกใช้วิธี "ยืนยัน" หลังจากวิธีที่คุณกำลังทดสอบควรถูกเรียกใช้
—
Sielu
SomeClass
ไม่มีคำจำกัดความMyMethod(string)
ซึ่งดูเหมือนว่าจะไม่มี