单元测试注释?

2024-03-15

我问自己应该对我的课程进行多深的(单元)测试。 例如,我有以下简单的类。

import javax.annotation.security.PermitAll;
import javax.ejb.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


@Path(value = "ping")
@Singleton
@PermitAll
public class PingRestService {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String pingMethod(){
        return "pong";
    }

}

我写了以下单元测试:

import static org.junit.Assert.*;
import java.lang.reflect.Method;
import javax.annotation.security.PermitAll;
import javax.ejb.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.junit.Test;


public class PingRestServiceTest {

    PingRestService prs = new PingRestService();

    @Test
    public void testClassAnnotations(){
        assertEquals(3, prs.getClass().getAnnotations().length);

        assertTrue(prs.getClass().isAnnotationPresent(PermitAll.class));
        assertTrue(prs.getClass().isAnnotationPresent(Singleton.class));
        assertTrue(prs.getClass().isAnnotationPresent(Path.class));

        assertEquals("ping", prs.getClass().getAnnotation(Path.class).value());

    }

    @Test
    public void testPingMethodAnnotations() throws SecurityException, NoSuchMethodException{

        Method method = prs.getClass().getDeclaredMethod("pingMethod");
        assertEquals(2, method.getAnnotations().length);

        assertTrue(method.isAnnotationPresent(GET.class));
        assertTrue(method.isAnnotationPresent(Produces.class));

        assertEquals(1, method.getAnnotation(Produces.class).value().length);
        assertEquals(MediaType.TEXT_PLAIN, method.getAnnotation(Produces.class).value()[0]);
    }

    @Test
    public void testPingMethod() {
        assertEquals("pong", prs.pingMethod());
    }

}

是否有意义? 或者我应该只测试返回的字符串(“pong”,testPingMethod),跳过所有注释测试(testClassAnnotations,testPingMethodAnnotations)?

我认为某些注释是业务逻辑的一部分(例如 PermitAll),因此应该进行测试。


大多数时候,我们测试的是代码的功能,而不是它的实现方式。这就是所谓的Black Box Testing (see: http://en.wikipedia.org/wiki/Black-box_testing http://en.wikipedia.org/wiki/Black-box_testing)。 实施测试时,您应该问自己:“要测试的单元可能的输入值是什么?预期结果是什么?” 现在,在测试中,您使用输入值调用代码,并使用预期的结果检查结果,以确保您的代码按照您想要的方式运行。 随着时间的推移,您可能会优化代码而不想要更改功能。那么你不需要改变你的测试。但您可以重新运行它以确保它的行为仍然相同。即使实施方式不同。或者,您可能会更改实现细节,这会对您测试的功能产生副作用。同样在这种情况下,您不需要更改测试,但只需要重新运行它。 在您的简单情况下,您没有输入和一个静态输出,因此您只需调用该方法并检查是否返回“pong”。但现实生活中经过测试的案例很少如此简单。

编辑:您可以看到安全性@PermitAll配置以及“@Path”配置为输入的 URL 路径,并按照“Boris the Spider”和“Avi”建议的方式在集成测试中测试它们。但其他注释是特定于实现的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试注释? 的相关文章

随机推荐

  • Jupyter Notebook 将默认文件夹设置为根目录

    我在 Windows 7 上使用 Jupyter Notebook 我想将默认文件夹设置为D 目前 我的 jupyter notebook config py 中有以下行 c NotebookApp notebook dir D 当我打开
  • 如何在Python中读取QLineEdit中的文本?

    我为我的插件创建了一个带有 3 个按钮的启动 GUI 这非常有效 如果我单击其中一个按钮 就会启动特定操作 到目前为止这有效 如果我单击其中一个按钮 则会出现一个带有两个按钮 确定 和 取消 的新 GUI 以及一个行编辑 如果我按下 取消
  • 如何在Geofence android中添加后台服务

    我正在尝试创建一个带有监控后台服务的地理围栏 地理围栏创建成功并在应用程序活动打开时工作 但在关闭应用程序地理围栏时不起作用 我现在应该怎么做 我的代码是 public class MapsActivity extends Fragment
  • 在 Eclipse 中使用 Maven Android 原型

    我正在尝试使用以下原型 https github com akquinet android archetypes wiki Android release archetype https github com akquinet androi
  • 如何在FragmentStatePagerAdapter中动态添加页面

    我知道这个问题被问了很多次 但经过多次研究后我没有得到答案 在我的主要活动中 我有一个视图寻呼机 并为此设置了一个适配器 public void onCreate Bundle savedInstanceState super onCrea
  • R 中按日期范围设置的 data.table 子集

    我在 data table 中有一个大型数据集 我想按日期范围对其进行子集化 我的数据集如下所示 testset lt data table date as Date c 2013 07 02 2013 08 03 2013 09 04 2
  • 如何从一个视图访问另一个视图的数据?

    我有一个UITabBarController有两个选项卡 UINavigationController OptionsViewController UIViewController 我如何获取数据 即UILabel text 设于Optio
  • 帕累托最优前沿

    我试图获得两个适应度函数的帕累托最优前沿 我通过使用虚拟矩阵对非支配解进行排序 该虚拟矩阵在矩阵中为任何非支配解分配 1 当我绘制帕累托前沿时 它不断包含我知道不属于帕累托最优的点 但是 我似乎找不到这个问题的原因 任何帮助将非常感激 fo
  • WebClient 下载字符串与 WebBrowser 查看源代码不同

    我正在创建一个 C 4 0 应用程序来使用 Web 客户端下载网页内容 网络客户端功能 public static string GetDocText string url string html string Empty try usin
  • Chrome:检查元素与查看源代码

    我正在使用 Chrome 10 接收 XML 格式的 Web 服务响应 请求成功完成 然后我想查看结果的内容 我转到 检查元素 并查看所需的 XML 出于好奇 我还查看了源码 我非常确定 Chrome 的工作方式是 Inspect Elem
  • D3 防止双击缩放[重复]

    这个问题在这里已经有答案了 我有一个 D3 网络图 我正在尝试禁用双击缩放功能 我使用它进行缩放 var zoom d3 behavior zoom scaleExtent minZoom maxZoom zoom on zoom func
  • JMS QueueSender 线程安全吗?

    我想在多线程环境中使用 QueueSender Is QueueSender send 线程安全 No a MessageProducer QueueSender不是线程安全的 或者更具体地说 Session http java sun c
  • 计算泊松概率百分比

    当您在 Excel 或 OpenOffice Calc 中使用 POISSON 函数时 它需要两个参数 一个整数 一个 平均 数字 并返回一个浮点数 在 Python 中 我尝试了 RandomArray 和 NumPy 它返回一个随机泊松
  • 如何在iOS应用程序中运行可执行文件?

    我想在我的系统中运行一个可执行文件iOS应用程序 或者执行一些命令行命令 我认为这可以在 NSTask 的帮助下完成 但这似乎在 iOS 中不可用 它仅适用于 mac OS X So 如何从我的应用程序运行可执行文件 或者我如何从我的应用程
  • 我可以从特定IP(如果机器有两个IP)在PHP中打开套接字吗?

    我正在使用 PHPMailer 它使用fsockopen访问 SMTP 服务器 但该机器有两个具有不同反向 DNS 记录的 IP 所以在电子邮件标题中我得到以下内容 Received from one server tld HELO ano
  • XPath 1 查询和属性名称

    第一个问题 有什么办法可以得到name节点的属性
  • 如何分割日语文本?

    使用 Java 分割日语文本的最佳方法是什么 例如 对于以下文本 私 名前 私 行 我需要以下输出 私 名前 私 行 可以使用黑字吗 您可以使用java text BreakIterator String TEXT 私 名前 私 行 Bre
  • 使用 strptime 获取具有时区偏移的日期时间对象时出现 ValueError [重复]

    这个问题在这里已经有答案了 我正在尝试将日期字符串转换为日期时间对象 dt datetime datetime strptime 2011 07 15 13 00 00 00 00 Y m d H M S 但我收到这个错误 Tracebac
  • 为什么我无法从 WPF 运行截图工具?

    我创建了一个带有很多按钮的 WPF 窗口 每个按钮都运行不同的程序 例如 要运行 MS Word 我使用了 System Diagnostics Process Start C Program Files x86 Microsoft Off
  • 单元测试注释?

    我问自己应该对我的课程进行多深的 单元 测试 例如 我有以下简单的类 import javax annotation security PermitAll import javax ejb Singleton import javax ws