C# 我应该在这里进行什么单元测试

C# 我应该在这里进行什么单元测试,c#,unit-testing,C#,Unit Testing,假设我有这样的方法 我应该在这里测试什么: public Subscription ChangeState(TestClass testClass, DateTime currentTime) { testClass.IsDisabled = true; testClass.IsDelete = true; Update(testClass); _logger.LogInfo($"Some Error message is going here");

假设我有这样的方法 我应该在这里测试什么:

public Subscription ChangeState(TestClass testClass, DateTime currentTime)
{
    testClass.IsDisabled = true;
    testClass.IsDelete = true;

    Update(testClass);

    _logger.LogInfo($"Some Error message is going here");

    return testClass;
}
首先,我想到的只有测试是禁用的,是删除状态测试
还有其他的测试案例吗?

这一切归结为该方法应该做什么,而不是它当前的代码,但是根据您所得到的,我可以找到一些简单的测试:

  • 参数必须与返回值相同
  • 断言如果发送为false,则这两个属性都设置为true
  • 如果属性都为true,是否确实需要调用
    Update
    ?这是测试可以发现的潜在改进
  • 检查是否确实调用了
    Update
    。由于这是另一种方法(我们不知道是私有还是什么),您可以验证其副作用
  • 如果没有发生错误,就不需要记录错误消息,这可能是实现中的错误(尽管不确定是否值得进行单元测试)
  • 一个明显的错误是,该方法不检查空值,测试很容易检查
  • 不用于执行单元测试,但根本不使用
    currentTime
    参数,应将其删除

没有更多的上下文,很难说。如果
ChangeState
应该…更改状态,那么您可能应该检查状态是否已更改。话虽如此,改变状态似乎不是这个函数要做的。它将
IsDisabled
IsDelete
设置为
true
,这意味着如果它们已经为true,则不会更改状态。我们不知道
Update
应该做什么;因为如果是这样,;那么这不是一条你的实时代码可以走的路;在这种情况下,你什么都不测试。问问自己你在测试什么?然后,给定一组已知的输入和一些业务逻辑(无论多么简单),您所处理的对象的状态发生了变化。您传入testClass,然后返回它。您将检查testClass以了解它是如何变化的。您希望此方法做什么?-测试看看它是否能做到这一点。如果你知道一个方法应该做什么,那么你就有了“我应该做什么单元测试”的答案,为什么不测试所有的东西呢?验证布尔状态更改,验证调用了
Update
,验证调用了
LogInfo
,并验证返回了相同的实例。