Mat*_*ips 2 c# testing tdd unit-testing
例:
public interface IFoo
{
bool DoSomething();
}
public class Foo:IFoo
{
public bool DoSomething()
{
var result = DoOtherThing();
...
return result;
}
public bool DoOtherThing()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的正常TDD方法是在方法DoSomething()和DoOtherThing()方法上编写单元测试.但如果DoOtherThing是私有方法,这将很难做到.我还读过,测试私有方法是禁止的.
是否可以在类上使用公共方法以便于代码覆盖和测试,即使只能通过其(IFoo)接口访问类的目的?通常我会将超出接口范围的方法作为私有方法,但这不允许您有效地测试所有代码.使方法公开允许您对Foo类进行正确的测试,但至少对我来说,拥有不从类外部调用的公共方法似乎是不正确的.这种方式对TDD来说是最好的还是有更好的方法?
公共方法是公开的,因为它们应该是可访问的 如果不打算从外部调用它,请将其设为私有.
如果您未能获得代码覆盖率,您可能希望将您的类分解为多个类并使用组合代替.
难以测试的事情通常表明存在设计缺陷.
更新
好吧,让我们假设您有一种发送电子邮件的方法.第1步是生成一个MailMessage类并填充它.第2步是发送电子邮件
这是两个责任(SRP).撰写电子邮件并实际发送.我不会在同一个班级那样做.如果您的所有电子邮件类组成他们的邮件然后发送它们,它也将是代码重复.你如何处理网络故障?你也复制了那些支票吗?
做类似的事情:
public class SendWelcomeEmailComposer
{
MailMessage Compose(User user)
}
public class EmailSender
{
void SendEmail(MailMessage);
}
public class EmailService
{
void SendWelcomeEmail(User user)
{
// compose email
// and send using the classes above.
}
}
Run Code Online (Sandbox Code Playgroud)
更新2
为什么你不应该测试私有方法的原因是我关注质量测量.如果你的测试覆盖率很低,你可能会违反一些基本原则(SOLID).
因此,最好花时间反思课程设计而不是尝试测试私有方法.
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |