【发布时间】:2017-01-04 10:49:05
【问题描述】:
我试图了解单元测试的某些方面,因此我创建了一个具有以下架构的简单解决方案:
在业务层中,我创建了一个实现 IFizzBuzz 接口的 FizzBuzz 类 (FizzBuzzService)。
namespace SampleApp2017.Business
{
public class FizzBuzzService : IFizzBuzz
{
public bool IsFizzBuzz(int num)
{
if (num % 3 == 0 || num % 6 == 0)
{
return true;
}
else
{
return false;
}
}
public bool IsFizz(int num)
{
return (num % 3 == 0 ? true : false);
}
public bool IsBuzz(int num)
{
if (num % 6 == 0)
{
return true;
}
else
{
return false;
}
}
}
}
(以及这里的接口细节供参考)
namespace SampleApp2017.Business
{
public interface IFizzBuzz
{
bool IsFizzBuzz(int num);
bool IsFizz(int num);
bool IsBuzz(int num);
}
}
在这个示例解决方案中,WebUI 和 ConsoleApp 都使用依赖注入来使用 FizzBuzz 服务,我理解为什么这是必要的,但是当涉及到对服务进行单元测试时,我感到很困惑。
下面是我为 FizzBuzz 方法设置的测试:
[TestMethod]
public void fizzbuzz_should_return_true()
{
//Arrange
//Bring in the business rules
IFizzBuzz _fbservice = new FizzBuzzService();
//Act
/// Send 12 to service, should return true
bool resultof12 = _fbservice.IsFizzBuzz(12);
//Assert
Assert.AreEqual(resultof12, true);
}
我现在正在寻找有关运行单元测试的“最佳实践”的一些指导。
- 上面的测试看起来正常吗? (运行良好)
- 在单元测试中使用 DI 是否常见?我确定是在测试一个类的具体实现吗?
-
在单元测试中,我需要对接口进行编程吗?会有什么问题:
FizzBuzzService _fbservice = new FizzBuzzService();
最后,如果我想在这个例子中模拟,它从哪里来,有什么优势?
【问题讨论】:
-
@Nkosi 根据您的建议更新
标签: c# unit-testing dependency-injection mocking