C# 编写单元测试用例

C# 编写单元测试用例,c#,unit-testing,C#,Unit Testing,我已经开始在我的一些项目中使用单元测试,我有一个小问题,我需要测试一个方法,我已经没有想法了,例如:我有这个 public class Clients { Public Assignment AssignClient(int? clientRef, int? productRef) //Assignment is an enum that has success,Failure,etc... { If(!checkCli

我已经开始在我的一些项目中使用单元测试,我有一个小问题,我需要测试一个方法,我已经没有想法了,例如:我有这个

    public class Clients
    {
      Public Assignment AssignClient(int? clientRef, int? productRef)
       //Assignment is an enum that has success,Failure,etc...
        {
         If(!checkClientAge(int clientRef)) Return Assignment.Tooyoung;
          If(!checkClientAvailability(int clientRef)) Return Assignment.NotAvailable;
         If(! checkProductavailability(int productRef)) Return Assignment.ProductNotAvailable;
        }
     }

我对client类和
AssignClient
进行了模拟,但我不确定如何使用三个布尔方法,也不确定您是否知道如何模拟这些方法?

如果您正在测试
Clients
类,那么您不需要模拟它,您需要一个真实的实例。取而代之的是模拟它使用的其他类,以便可以从中返回已知和可预测的结果,并消除诸如数据库访问、UI交互等复杂问题


AssignClient
方法不是单元测试的好选择,除非对私有方法的三个调用设置了外部可见的标志或属性-如果它们没有设置,那么就没有什么可测量或观察的,您无法判断测试是成功还是失败。

当您已经模拟AssignClient()时,为什么内部方法会困扰您方法?除非你显示每个方法的代码,否则无法判断。@Dima好吧,这是一个想法,因为有人建议我不应该向数据库发送任何东西,但是我在sqlconnection上也遇到了一个错误,当我在AssignClientClientClients类上进行模拟时,没有初始化。AssignClientClients类有很多方法,AssignClients就是其中之一。我对编写一个测试感兴趣,因为这个测试在很多其他实例中使用,并且随着时间的推移已经发生了变化。我没有放完整的代码,但是例如checkClientAge(int clientRef)是这样的:if(!checkClientAge(int clientRef))return Assignment.TooYoung;等..@JackM这是测试该类和/或方法的一个很好的理由。
Assignment
enum是您应该检查的内容-传入您知道应该失败的值,并检查返回结果是否符合预期。然后传入正确的值并检查结果。通常,您会测试每个ext真正做某事的内部可访问方法(并非所有内容都值得测试)。我不清楚你说的是什么。请举一个例子或参考一下这是在哪里做的。还有其他人,我实际上已经解决了这个问题,我做的方式是一次模拟一个方法并检查结果,而不必触摸数据库,然后检查结果。