gpt4 book ai didi

c# - 我应该如何测试访问私有(private)成员的公共(public)方法

转载 作者:行者123 更新时间:2023-11-30 14:39:40 24 4
gpt4 key购买 nike

所以我有一些类似的东西

private List<ConcurrentQueue<int>> listOfQueues = new List<ConcurrentQueue<int>>()
public void InsertInt(int id, int value)
{
listOfQueues[id].Enqueue(value);
}

这是我不应该进行单元测试的东西吗?
如果是,我如何在不使用任何其他方法的情况下测试 InsertInt 方法?是否可以使用该方法从队列中检索数据以测试输入是否正确?这是我应该使用模拟的东西吗?

最佳答案

您通常不想测试私有(private)成员。单元测试的要点是,从外部看,该类接受指定的输入,并且(在请求时)将为您提供正确的输出。您不关心它如何为您提供这些输出的实现,您只关心它为您提供正确的输出以供外部使用。

为了说明这一点,假设您创建了一个单元测试来验证您的 InsertInt()方法将 int 插入到 listOfQueues .然后你的要求改变了,你必须改变你的实现策略,而不是使用 List<ConcurrentQueue<int>>它变成了 Dictionary<string, ConcurrentQueue<int>> .这实际上可能不需要更改您的输入,并且您的输出仍然可以通过任何输出验证,但是您的 InsertInt()单元测试将失败,因为它被硬编码到实现中。

更好的想法是进行单元测试,以确保如果您调用 InsertInt()使用正确的输入,您的输出方法仍将返回正确的输出,以及创建调用 InsertInt() 的单元测试。使用无效参数会导致异常。然后,您可以更改有关内部实现的所有内容,并确信您的类仍在正常工作。对实现进行单元测试会增加额外的开销,同时在可测试性方面提供的好处很少。

请注意,我并不是说该方法不应该进行单元测试,只是单元测试的开发方式需要反射(reflect)外部对象将如何与您的类进行交互。

关于c# - 我应该如何测试访问私有(private)成员的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com