如何对具有其他条件的方法进行单元测试?

时间:2018-09-28 06:19:47

标签: c# unit-testing

我是单元测试的新手。我想测试一种为用户上传个人资料图片的方法。我想知道如何通过以下方法测试其他路径

<readonly>

我正在使用模拟文件,但不知道如何检查文件的其他部分。在这种情况下,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

最佳做法是在单元测试中不要使用if...else。将单元测试分为两个:

  1. 使用空值进行测试
  2. 使用非null值进行测试

您可能不想使用逻辑单元来测试单元测试。

答案 1 :(得分:0)

考虑首先提取一个接口,例如具有Resharper的IUser或类似的接口,也将获得以下示例代码。

public interface IUser {
 string UserName { get; set; }
 }

太好了,所以现在我们可以将变量user定义为IUser。

IUser user = GetUser();

现在,您需要更改User才能实现IUser,如果无法实现,则将您测试的代码牢固耦合到User。通常,请尝试避免使用具体类型和静态调用。这使您的代码难以测试!

如果您可以过渡到IUser,那么前进的道路就很容易。在测试项目中执行以下Nuget命令:

  

安装包最低订购量

现在,您可以嘲笑您的用户。

var userMock = new Mock<IUser>();

使用接口和模拟可以使您的代码更具可测试性,并且可以解决此代码覆盖情况。但是,如果User是具体类型,并且您不能将其更改为实现IUser,则必须为每个具体方案创建两个单元测试。

请相信以下声明:

  • 避开代码中的静态调用,它们有害于可测试性
  • 坚持使用接口,而不是尽可能坚持具体的类型
  • 使用Moq之类的模拟框架
  • 选择正确的粒度级别并测试您的被测系统。不要一次测试太多组件
  • 使用依赖项注入并将接口作为依赖项传递给构造器。
  • 我们想要松散的耦合和高凝聚力
  • 我们想要可测试性
  • 我们要坚持SOLID原则