You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不支持@Rule的JUnit 6中实现Sniffy的JUnit测试

如何在不支持@Rule的JUnit 6中实现Sniffy的JUnit测试

嗨,我来帮你搞定这个问题~

你遇到的核心问题是:JUnit 5(包括你提到的JUnit 6,其实官方目前的最新版本仍属于JUnit 5 Jupiter生态)已经废弃了JUnit 4时代的@Rule注解,转而采用**扩展模型(Extension Model)**来实现类似的功能。好在Sniffy完全支持JUnit 5的扩展机制,不需要再依赖@Rule啦。

下面是具体的修改步骤和调整后的代码:

1. 替换@Rule为JUnit 5的扩展注册方式

JUnit 5提供了两种替代@Rule的方案,选其中一种就行:

  • 方案一:用@RegisterExtension注解注册Sniffy扩展实例(和原来的@Rule用法最接近)
  • 方案二:在测试类上添加@ExtendWith(SniffyExtension.class)注解(更简洁,适合不需要自定义扩展实例的场景)

2. 调整后的完整测试代码

这里用@RegisterExtension的方案来修改你的代码,保持和原写法的连贯性:

package edu.group5.app.control;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.sniffy.socket.DisableSockets;
import io.sniffy.test.junit5.SniffyExtension;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertFalse;

public class OrgAPIWrapperTest {
  String testURL;
  String wrongURL;

  @BeforeEach
  void init() {
    testURL = "https://app.innsamlingskontrollen.no/api/public/v1/all";
    wrongURL = "This is not a URL";
  }

  // 替换原来的@Rule,用JUnit 5的@RegisterExtension
  @RegisterExtension
  public static final SniffyExtension sniffyExtension = SniffyExtension.INSTANCE;

  @Test
  @DisableSockets
  public void noConnectionReturnsFalseImport() {
    // 这里写你要测试的无网络场景代码就好
    // 比如调用你的OrgAPIWrapper方法,然后断言结果
    // 示例逻辑:
    // OrgAPIWrapper wrapper = new OrgAPIWrapper();
    // boolean result = wrapper.importFromURL(testURL);
    // assertFalse(result, "无网络时应该返回false");
  }
}

补充说明

  • 注意引入的Sniffy扩展类是io.sniffy.test.junit5.SniffyExtension,不是原来JUnit 4的SniffyRule哦~
  • @DisableSockets注解在JUnit 5下完全兼容,不需要修改,它会让Sniffy拦截测试中所有的Socket连接,完美模拟无网络环境。
  • 如果你不需要自定义Sniffy扩展的实例,也可以直接在测试类上加上@ExtendWith(SniffyExtension.class),然后删掉@RegisterExtension那行代码,效果是一样的。

备注:内容来源于stack exchange,提问作者Lucy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:13:02