我有一个叫做的方法:
1 error found:
File: C:\Users\Hunter\workspace\src\rejomedia.java [line: 74]
Error: Unhandled exception type java.lang.Exception
和重载的方法
SendMail(string from, string to, string subject, string smtpServer)
在我的单元测试中,我想设置我的SendMail(string from, string to, string subject, SmtpClient smtpClient)
模拟,以便在调用方法MailService
时,我想调用重载方法SendMail(string, string, string, string)
并将最后一个参数修改为创建了SendMail(string, string, string, SmtpClient)
测试对象。</ p>
有办法吗?
答案 0 :(得分:4)
您想要的是在设置
上使用.Callback(...)
mailServiceMock
.Setup(m => m.SendMail(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())
.CallBack((string from, string to, string subject, string server) => mailService.SendMail(from, to, subject, server, SomeSMTPServer)
更重要的是你为什么要这样做?
通常你只会测试你的模拟调用(string,stirng,string,string)。
然后在调用
时测试另一个TestClass / Fixture(string from, string to, string subject, string smtpServer)
重载,您实际上使用正确的详细信息调用SmtpServer
重载。
编辑:评论后
mailService
不是拼写错误。
这将是:
mailServiceMock.Object
,则使用相同的模拟等级(例如var mailServiceMock = new Mock<ParentClassNotInterface>{ CallsBase = true }
)。这意味着你的方法有是虚拟的。关于第二个注释,如果我是你,我会将其分解为以下一个/部分/全部:
调用类/方法调用SendServer(string, string, string, string)
的单元测试。我会使用我在博客上描述的技术:CodePerf[dot]NET - TDD – Mock.Throw Interface Call Verification Technique
单元测试,当您致电SendServer(string, string, string, string)
时,它会调用SendServer(string, string, string, SmtpServer)
并正确设置SmtpServer。
集成测试,SendServer(字符串,字符串,字符串,SmtpServer)实际上发送电子邮件。
可能是端到端的测试(没有嘲讽)这一切都有效。
答案 1 :(得分:0)
最简单的
mailServiceMock.Setup(m => m.SendMail(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<SmtpClient>()));
如果你愿意,可以使用回调/回传法。