gpt4 book ai didi

c# - 如何对使用线程的方法进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:15 25 4
gpt4 key购买 nike

如何为使用线程的方法编写单元测试。

在下面的示例中如何测试 someMethod 方法?

    public class SomeClass {

private final SomeOtherClass someOtherClassInstance = IoC.getInstance(SomeOtherClass.class);

private final ExecutorService executorService = Executors.newCachedThreadPool();

public void someMethod() {
executorService.execute(new Runnable() {
@Override
public void run() {
someOtherClassInstance.someOtherMethod();
}
});
}
}

在 java 和 .net 中是否有任何为此目的的解决方案?

最佳答案

您的问题是“什么是单元测试”(UT)。 UT 只是自动化测试的一种形式。在这种情况下,您的问题暗示代码调用操作系统来启动线程,因此根据定义,测试它的测试不是单元测试,而可能是集成测试。

为什么我用看似语义的东西来打扰你,是因为理解测试的意图使得编写测试和构建代码变得如此容易。工作代码的数量大于可测试代码的数量。

那么,如何才能将此代码更改为可单元测试(我将跳过“何必麻烦”)...

C# 中的单元测试测试单一类型(您的类)……重要的是(根据定义)没有别的。所以你的代码需要反射(reflect)这一点。您想要测试的是,当我调用 ABC 时,它会执行这些操作。东西包括启动线程。所以你想测试启动一个线程的方法。这里的基础是您的应用程序需要一个线程,所以这就是您的断言。

那怎么办?为线程创建创建一个代理,也许还有一个工厂。然后您可以在单元测试中断言它被调用以及它是如何被处理的。听起来很难,但当你养成习惯时真的很容易。

顺便说一句,Resharper 为操作系统类型(例如线程)创建代理。在他们的帮助中查看委派成员的资料。如果您不使用 Resharper,您应该使用。

是的,我知道这不是您想要的答案,但请相信我,这是您需要的答案。

我发现按类别考虑测试很有用:

  • 单元测试
  • 集成测试(或者子系统测试)
  • 功能测试(例如 UI/应用程序/UAT 测试)

关于c# - 如何对使用线程的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12706525/

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