新闻详情

新闻详情

首页 / 资讯中心 / 详情

IDEA中@Test注解使用指南:从环境配置到实战技巧

发布时间:2026/10/1 11:23:15来源:尧图网络
IDEA中@Test注解使用指南:从环境配置到实战技巧
作为写Java的人IDEA基本是绕不开的日常工具而Test注解又是每个Java后端开发几乎每天都会碰到的东西。但说实话我见过太多同事把Test当摆设写了注解不知道怎么跑、跑起来不知道怎么看结果、想让测试自动执行某个初始化逻辑又一头雾水。这篇文章就围绕“IDEA中如何使用Test”这个话题把从环境准备到进阶玩法、再到常见坑排查的完整链路捋一遍希望能给你省下一些自己踩坑的时间。先说清楚Test是什么。它是JUnit框架提供的一个方法级注解标注在普通方法上让这个方法变成一个可独立执行的单元测试方法。IDEA对JUnit的支持从很早的版本就非常成熟你写完测试方法后行号旁边会出现绿色的运行箭头点击即可运行。这个体验看起来简单背后其实牵扯到依赖配置、测试发现机制、断言库选型、生命周期管理等一系列问题。这篇文章适合刚接触IDEA和JUnit的新手也适合写了一段时间测试但没系统整理过操作细节的老手。1. Test在IDEA里的角色不只是加个注解1.1 JUnit体系与Test的关系很多初学者会把“JUnit”和“Test”划等号这不算错但不完整。Test只是JUnit提供给使用者最常用的一个入口注解。在JUnit 4中Test来自org.junit.Test包到了JUnit 5也就是Jupiter版本Test改成了org.junit.jupiter.api.Test。两者功能类似但归属的派系完全不同。这里有一个在实际工作中很容易踩的坑IDEA新建项目时不同版本默认引入的JUnit版本不一样。老一点的Spring Boot 2.2之前很多项目用的是JUnit 4依赖Spring Boot 2.2开始spring-boot-starter-test默认带上JUnit 5。于是当你从网上下载一个新旧混合的项目代码经常会出现明明写了TestIDEA却告诉你“Cannot resolve symbol Test”或者右键没有运行选项的情况这就是典型的依赖版本或依赖缺失问题。从功能角度来看Test注解本身不带任何业务逻辑它只是告诉IDEA和构建工具“这个方法是一个测试用例你要在测试阶段执行它。”IDEA通过扫描指定目录比如Maven项目的src/test/java下的类寻找标注了Test的公有方法然后交给JUnit的Runner去执行。换句话说你在IDEA里能不能用Test取决于三件事依赖有没有引入、测试类放的位置对不对、方法签名是否满足要求。1.2 为什么推荐直接用IDEA跑测试很多人习惯“代码写完、mvn test一把梭”然后盯着命令行输出看结果。这当然可以但在IDEA里直接用Test方式运行工作效率完全不一样。IDEA会为每个可运行的测试方法提供一个专属运行配置你可以右键运行单个方法、单个类也可以运行一个包下所有测试。运行结束后结果会以树形结构展示在Run面板里哪个方法失败、失败原因是什么、堆栈信息在哪一行一目了然。这些信息如果用Maven命令去本地复现效率低得多尤其是当测试类很多、只想调试某一个方法时mvn test -Dtest...虽然也可以实现但远没有IDEA里点一下来得痛快。还有一点IDEA为测试提供了调试模式。你可以在测试方法里打上断点点击Debug运行单步跟踪被测代码的执行过程。这在排查复杂bug时几乎是必备操作——一个普通的main方法虽然也能Debug但Test方法的优势是隔离性它只测试你关心的逻辑片段不会触发整个应用的启动过程尤其适合工具类、算法类、业务计算类的快速验证。2. 第一步把JUnit依赖配好2.1 Maven项目引入JUnit的常见姿势这一节是给刚接触IDEA的新手准备的老手可以直接跳到2.4看几个容易踩的坑。假设你已经有一个Maven项目在pom.xml里引入JUnit依赖是最基础的操作。如果是JUnit 4风格的项目只需要dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.13.2/version scopetest/scope /dependency如果是Spring Boot项目通常不需要手动加JUnit依赖因为spring-boot-starter-test已经帮你把JUnit 5、Mockito、AssertJ等测试库都打包进来了dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency如果你是纯JUnit 5项目而且没有使用Spring Boot可以单独引入dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version5.10.2/version scopetest/scope /dependencyjunit-jupiter是一个聚合依赖里面包含了junit-jupiter-api注解和API、junit-jupiter-params参数化测试支持、junit-jupiter-engine测试执行引擎一次配好就够用。引入依赖后IDEA通常会自动下载Maven依赖如果右下角有Maven导入提示记得点“Enable Auto-Import”否则你写了Test还是会爆红。2.2 Gradle项目怎么配Gradle项目的配置逻辑和Maven类似区别在于语法。在build.gradle的dependencies块中加入dependencies { testImplementation org.junit.jupiter:junit-jupiter:5.10.2 testRuntimeOnly org.junit.platform:junit-platform-launcher } test { useJUnitPlatform() }注意useJUnitPlatform()这句话很重要。如果项目用的Gradle版本较老或者你用了JUnit 4依赖又不加这句话Gradle默认用的测试框架发现机制可能不认JUnit 5的Test注解结果就是所有测试变成了“No tests found for given includes”。这一点和IDEA里的表现还不完全一样IDEA本身对JUnit 5支持很智能但如果你在公司项目里执行CI流水线Gradle配置不对测试会被静默跳过但Jenkins等CI平台还会误以为构建成功这就比较坑了。2.3 依赖配置的三个典型坑第一个坑test作用域写错。有人图省事直接用compile作用域引入JUnit看似能用但会把测试依赖打进生产jar包既增加体积又显得不专业。Java项目有严格的构建规范测试依赖就该用test作用域或testImplementation配置。第二个坑JUnit 4和JUnit 5版本混用。有些项目自己引入了JUnit 4的junit:junit另一个模块又依赖了JUnit 5结果执行时会出现“JUnit Vintage”和“JUnit Jupiter”两套引擎并存的情况。如果测试类上使用的注解来自JUnit 4但IDEA的Run配置默认选用了JUnit 5引擎有时会出现明明方法上有Test却无法运行的情况。遇到这种情况优先统一版本不要在一个模块里混用两种派系的注解。第三个坑依赖下载失败导致IDEA缓存异常。公司网络环境下Maven私服偶尔会断连pom.xml里的依赖长时间处于红色波浪线状态。这时候可以在IDEA右侧Maven面板里点击“Reload All Maven Projects”如果还是不行就检查~/.m2/repository下对应的jar包是否损坏必要时删除后重新下载。别一上来就怀疑代码写错了。3. 写一个能跑的Test测试方法3.1 测试类的标准位置Maven和Gradle的标准目录结构里测试代码统一放在src/test/java下和主代码的包名保持一致的层级。例如主代码里有com.example.service.UserService那么对应的测试类就是com.example.service.UserServiceTest文件路径为src/test/java/com/example/service/UserServiceTest.java。为什么一定要放在这个目录因为Maven的生命周期约定中src/test/java下的代码会在执行mvn test阶段自动编译和运行。如果你把测试类放到src/main/java下虽然IDEA也能运行但执行Maven构建时不会把它当测试代码处理还会导致主代码包体积膨胀。IDEA里有一个非常方便的导航快捷键在UserService的类名或方法名上按下CtrlShiftTmacOS为CmdShiftTIDEA会自动询问“Create New Test”然后帮你生成测试类、选择要测试的方法、生成骨架代码。这也是很多人第一次接触Test的入口。3.2 最简单的Test方法长什么样下面是一个标准的JUnit 5测试方法模板import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { Test void testAdd() { Calculator calculator new Calculator(); int result calculator.add(1, 2); assertEquals(3, result); } }这里有三点需要特别说明。第一方法权限。JUnit 5里Test方法可以是包级私有也就是默认权限不需要强制写成public。JUnit 4虽然允许public但也不是强制要求所有测试方法都是public。不过为了风格统一我建议保留public或者干脆省略看团队规范。第二方法名。测试方法名没有强制要求但强烈建议用test前缀或语义化的名字比如shouldReturnTrueWhenInputIsValid。千万不要用test1、test2这种名字否则运行失败时你根本不知道哪条业务链路出了问题。第三返回值必须是void。如果你在Test方法上写了int、boolean之类的返回值JUnit会直接拒绝执行IDE也会提前给出编译性提示。3.3 运行测试的几种方式和结果面板解读IDEA运行Test方法的方式非常灵活挑你顺手的就行点击方法左侧行号处的绿色三角箭头选择“Run testAdd()”。把光标放到方法体内按下CtrlShiftF10macOS为ControlShiftRIDEA会自动识别当前方法是测试方法并运行。右键类名选择“Run CalculatorTest”运行整个测试类。右键包名选择“Run All Tests”运行包下所有测试。运行结束后会弹出Run面板面板左侧是测试用例的树形列表绿色对勾代表通过红色代表失败黄色图标通常是测试被跳过了比如加了Disabled。右侧是控制台输出和异常堆栈。重点说一个很多人不看的地方底部的“Tests passed: 1, Tests failed: 0”只是一行汇总真正的失败原因要看下面的堆栈信息例如AssertionFailedError: expected: 4 but was: 3 at com.example.CalculatorTest.testAdd(CalculatorTest.java:12)这一行直接告诉你断言期望值是4实际结果是3并且定位到了源代码的第12行。别再傻傻地去打印System.out.println调试Test了断言失败的信息远比打印日志准确。还有一个小技巧在Run面板左侧的测试树中右键你可以选择“Go To Test”或者从测试类跳回被测类快捷键CtrlShiftT的另一个方向。调试一个测试方法也是在Run区域右键选择“Debug”即可。3.4 断言让测试真正有价值一个只有Test但连断言都没有的方法本质上只是“能运行的代码片段”。它也许能证明“没报异常”但无法证明“结果是对的”。所以断言是测试的灵魂。JUnit 5的断言API比JUnit 4更友好主要在org.junit.jupiter.api.Assertions类中。像我上面用到的assertEquals(expected, actual)是最基础的。实际开发中下面几个断言出现频率非常高import static org.junit.jupiter.api.Assertions.*; // 判断结果为真 assertTrue(user.isActive()); // 判断结果为假 assertFalse(user.isDeleted()); // 判断对象不为null assertNotNull(userService.findById(1L)); // 判断数组或集合内容一致 assertArrayEquals(new int[]{1, 2, 3}, new int[]{1, 2, 3}); // 判断抛异常 assertThrows(IllegalArgumentException.class, () - userService.create(null));这里说一个实际经验assertEquals对浮点数的比较要小心。直接assertEquals(0.1 0.2, 0.3)一定会失败因为浮点数精度问题。JUnit 5提供了assertEquals(double expected, double actual, double delta)重载使用时需要传入精度范围assertEquals(0.3, 0.1 0.2, 0.0001);另外很多人在断言集合时习惯用assertTrue(list.size() 3)这能跑但可读性差。建议用AssertJ的assertThat(list).hasSize(3)Spring Boot自带AssertJ依赖体验会好很多。如果你在做纯JUnit项目也可以用JUnit自带的assertIterableEquals。断言的可读性直接影响测试用例的维护成本——你的测试代码将来是要给别人读的。4. 进阶把Test用得像个老手4.1 前置与后置正确管理测试环境一个稍微复杂的测试场景里经常需要在每个测试方法执行前准备数据执行后清理数据。JUnit 5提供了四个生命周期注解BeforeAll、AfterAll、BeforeEach、AfterEach。public class UserServiceTest { BeforeAll static void initAll() { System.out.println(所有测试方法执行前只执行一次); } AfterAll static void tearDownAll() { System.out.println(所有测试方法执行后只执行一次); } BeforeEach void init() { System.out.println(每个测试方法执行前都会执行); } AfterEach void tearDown() { System.out.println(每个测试方法执行后都会执行); } Test void test1() { } Test void test2() { } }执行顺序是BeforeAll→BeforeEach→test1→AfterEach→BeforeEach→test2→AfterAll。注意BeforeAll和AfterAll修饰的方法在JUnit 5中默认要求是static除非你在类上加了TestInstance(TestInstance.Lifecycle.PER_CLASS)。实际项目里BeforeEach最常用的场景是初始化测试对象、准备Mock数据、开启事务等。别在BeforeEach里做太重的操作比如启动数据库连接池或者加载整个Spring容器那样会让每个测试方法都变慢测试粒度也会模糊。如果多个测试类都需要同样的初始化逻辑更合理的做法是抽一个公共父类或者用JUnit 5的ExtendWith扩展。4.2 参数化测试一套数据跑多遍如果一个测试方法需要验证多组不同输入你是不是会下意识地写多个Test方法或者在一个方法里手动for循环加断言这两种方式都有问题多个Test方法会让测试报告膨胀for循环则会让断言失败时无法精确定位是哪一组数据出了问题。JUnit 5的参数化测试是解决这类需求的标配先要确保依赖里包含junit-jupiter-params。示例import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; class ParamTest { ParameterizedTest ValueSource(strings {racecar, radar, level}) void testPalindrome(String word) { assertTrue(isPalindrome(word)); } }执行后IDE会把这个方法按照参数个数拆成多个测试用例。ValueSource是最简单的一种数据源适用于基本类型和字符串。除了它JUnit 5还支持CsvSource、MethodSource、EnumSource等其中最常配合使用的是MethodSource因为它可以返回任意复杂对象集合ParameterizedTest MethodSource(userProvider) void testUser(User user) { assertNotNull(user.getName()); } static StreamUser userProvider() { return Stream.of( new User(Alice), new User(Bob) ); }有一点要注意MethodSource指向的方法必须是static且不接收参数。返回值是Stream时最好加上具体泛型否则IDEA给不出类型提示。如果你在IDEA里使用参数化测试看到Run面板里同一个方法名出现多个子节点不要觉得奇怪这是JUnit 5引擎刻意为之目的就是方便你在失败时快速定位具体输入数据。4.3 异常、超时与禁用把边界情况管起来assertThrows可以断言程序抛出了指定异常前面已经提到过。这里补充一个细节有经验的程序员在测试异常时不仅会断言异常类型还会断言异常消息。比如IllegalArgumentException ex assertThrows( IllegalArgumentException.class, () - userService.create(null) ); assertTrue(ex.getMessage().contains(用户名不能为空));这样可以确保异常信息是业务层自己抛出的而不是某个底层库里误触发的同类异常排查问题的时候能省下很多沟通成本。Timeout注解用来限制测试方法的最大执行时间常用于防止测试代码进入死循环或者依赖外部服务时无限等待Test Timeout(5) void testSlowMethod() { Thread.sleep(6000); // 这里会触发超时失败 }默认单位是秒也可以写成Timeout(value 500, unit TimeUnit.MILLISECONDS)。这个注解在接入CI流水线时尤其重要——一个卡死的测试会让整个构建流水线挂起设置超时等于给测试加了一道保险。Disabled用来临时停用某个测试方法等价于JUnit 4中的Ignore。如果某个测试方法因为外部环境原因暂时无法通过但又不想删掉可以加上Disabled(这里写停用原因)。注意要写原因不然团队里其他人看到被跳过的测试会一脸茫然。5. 在Spring Boot项目里用Test的实战经验5.1 让测试拿到IOC容器在Spring Boot项目中很多Test测试的对象是Service、Repository这类被Spring容器管理的Bean。如果只是直接new一个Service出来Mapper、RedisTemplate等依赖就无法注入跑起来全是空指针。标准的做法是给测试类加上SpringBootTest注解SpringBootTest class UserServiceTest { Autowired private UserService userService; Test void contextLoads() { assertNotNull(userService); } }加了这个注解后JUnit运行时就会启动或复用已有的Spring应用上下文。这里有一个很重要的经验如果一个项目里已经有多个SpringBootTest测试类而每个测试类都用了不同的配置类或不同的application.ymlSpring上下文会被重复创建测试整体耗时可能从几秒变成几十秒。解决方式是尽量让所有测试类共用一份配置或者用ContextConfiguration指定同一个上下文。另外SpringBootTest默认会往测试环境里扔进所有注册的DataSource、RabbitMQ连接等如果你的配置里连的是生产库或测试环境的共享库运行测试时可能会产生脏数据。这时候有两种常见解法一是把测试库切到本地或内存库二是配合事务注解让测试结束后自动回滚。5.2 测试数据污染怎么避免这是我在实际项目中遇到最多的一个问题。测试方法A插入了user表一条数据方法B查询整张表做断言结果因为方法A的数据还在B的断言就失败了。如果只是单机本地跑还好到了CI的并行节点上这种问题出现的频率会成倍增加。一个比较轻量的做法是给测试方法加上Transactional让测试方法跑在事务里方法结束自动回滚不污染数据库Test Transactional void testCreateUser() { User user userService.create(...); assertNotNull(user.getId()); }但这里有个坑如果被测Service内部自己开启了新事务比如Transactional(propagation Propagation.REQUIRES_NEW)那么内部事务提交时外部测试事务是感知不到的依然可能留下数据。遇到这种情况更可靠的方案是用专门的测试数据库或者用Sql注解在测试前插入干净的初始数据、测试后清理Test Sql(scripts {/test-data/clean-user.sql}, executionPhase Sql.ExecutionPhase.AFTER_TEST_METHOD) void testQuery() { // 查询并断言 }没有哪种方案能包治百病但“测试数据不污染”是必须坚守的红线否则测试跑着跑着数据就对不上了后续排查成本非常高。5.3 实战建议测试Profile与内存数据库如果你在写Spring Boot集成测试强烈建议给测试环境的配置单独建一个src/test/resources/application-test.yml然后测试类或者application.yml里指定spring.profiles.activetest。这个文件里可以配置本地H2数据库或者测试环境的专用数据库地址避免测试直接打到开发库上。使用H2内存数据库时Maven依赖一般这样加dependency groupIdcom.h2database/groupId artifactIdh2/artifactId scopetest/scope /dependency然后在src/test/resources/application-test.yml里spring: datasource: url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY-1 driver-class-name: org.h2.Driver username: sa password:这里有个细节是DB_CLOSE_DELAY-1它保证JVM存活期间内存数据库不自动关闭。不加这个参数多个测试类共用数据库连接时可能会发生连接池持有已关闭数据库的异常。我刚开始用H2时就踩过这个坑排查了很久才发现是这个参数的问题。有一点要承认H2的SQL方言和MySQL/Oracle并不完全一致如果你的项目里用了大量数据库特性函数H2下测试很可能编译就不过。这种情况下比较实际的方案是本地开发用Testcontainers启动一个真实MySQL容器来测试效果虽好但资源占用也高适合团队已有容器化基础的情况。6. 常见问题排查IDEA里Test跑不起来的那些原因6.1 注解爆红或编译不过看到Test下面画着红色波浪线最常见的三个原因没引入JUnit依赖依赖版本不对IDEA的Maven/Gradle没有重新导入。我的排查顺序是先看pom.xml有没有相关依赖再点Maven面板的“Reload All Maven Projects”最后在命令里跑一下mvn compile或mvn test-compile验证依赖是否能正常下载。如果编译过不去再检查JDK版本——JUnit 5要求JDK 8及以上太老的JDK虽然能写代码但运行时会报UnsupportedClassVersionError。6.2 右键没有Run选项这种情况通常是因为测试类没有被IDEA识别为“测试类目录”下的源文件。如果你把测试代码放到了src/main/java下面IDEA的JUnit运行机制有时会判断不出这是测试代码右键也不会出现“Run TestClass”的选项。解决办法很简单把测试代码挪到src/test/java目录。还有一种可能就是测试方法不是void或方法上有参数且未配套注解IDEA也会在右键菜单里不给“Run”选项。6.3 测试方法存在但不执行如果你点了运行但面板里显示“Process finished with exit code 0”或者“No tests were found”先检查测试方法上是不是真的加了Test且该Test是从正确包导入的。JUnit 5的Test是org.junit.jupiter.api.TestJUnit 4的是org.junit.Test。如果项目中同时存在两套依赖IDEA偶尔会选中错误的运行引擎。建议统一测试注解来源不要混用。还有Gradle项目里别忘配useJUnitPlatform()。6.4 中文乱码运行Test时控制台输出中文乱码通常是因为IDEA控制台默认编码是UTF-8而项目配置文件或编译字节码用了GBK。可以在Help菜单里修改VM参数也可以在pom.xml里显式指定编码properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding /propertiesSpring Boot项目还建议检查application.yml中server.tomcat.uri-encoding之类的配置。别小看乱码问题它影响的不只是输出有时判断字符串相等也会因为编码不一致而失败。6.5 Maven打包时怎么跳过测试热搜词里很多人搜“IDEA在install的时候怎么跳过test”说明对Maven生命周期还不熟。mvn install默认会触发test阶段如果某个测试方法失败整个构建就挂了。临时跳过测试有两种命令# 编译测试代码但不运行 mvn install -DskipTests # 连测试代码都跳过不编译 mvn install -Dmaven.test.skiptrue在IDEA里你也可以在Maven Runner配置里加上-DskipTests这样每次点击install按钮都会自动跳过测试。但我个人的经验是跳过测试适合本地开发调试时临时用真正要提测或发版时测试必须完整跑一遍。也别在pom.xml里把skipTests写死成true否则团队里所有人在IDEA里都会跳过测试埋下巨大的质量隐患。个人经验测试命中率比数量重要最后聊聊我自己的习惯。刚写代码那两年我用Test只是图它比写main方法省事测试方法写得又多又杂但真正统计起来很多测试根本覆盖不到业务核心。后来慢慢发现与其追求测试数量不如想清楚每个测试方法在验证什么。一个合格的Test应该有明确的输入、期望输出、独立的环境准备和清理逻辑运行时不应该依赖外部真实数据库、网络接口和文件路径。在IDEA里我会定期用右键菜单里的“Run All Tests with Coverage”看一眼代码覆盖率重点观察关键分支有没有被覆盖到。另外我习惯给每个测试方法都写清楚的中文DisplayName比如DisplayName(用户名为空时抛出异常)这样测试报告出来哪怕不是写这个代码的人也能一眼知道它在验证什么行为。IDEA对DisplayName的支持很友好Run面板里直接把中文名称展示出来比看一堆test01、test02直观多了。测试这块用心的收益是长期的它会成为你重构代码时最安心的底气。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

最近开发了一款截图软件*截图快手* 2026/10/1 14:34:56

最近开发了一款截图软件*截图快手*

我最近开发了一款截图软件截图快手,本来是想方便自己使用,不过我也把它提交到了微软应用商店,喜欢的可以免费下载体验。 主要功能如下: 一、功能①:滚动长截图,整个网页一张图 长截图是 截图快手 最实用的功…

阅读更多 →
专业的小型台式回流 2026/10/1 14:34:56

专业的小型台式回流

选小型焊接设备,客户最关心三件事:能否稳定跑通自己的板型、工艺参数是否好调、出了问题厂家能否及时响应。小型台式回流焊重点看温度均匀性、升温曲线与冷却速率;小型波峰焊重点看锡炉容量、波峰高度与助焊剂喷涂稳定性。专业的小型台式回流…

阅读更多 →
GLM-4.6编程计划实战指南:用TaoToken统一Key跑通OpenCode与Claude Code 2026/10/1 14:34:56

GLM-4.6编程计划实战指南:用TaoToken统一Key跑通OpenCode与Claude Code

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
微信pdf转word怎么弄?零下载免费方法,新手10秒搞定 2026/10/1 14:34:56

微信pdf转word怎么弄?零下载免费方法,新手10秒搞定

日常办公、学习中,大家经常会在微信收到PDF文件。想修改文字、编辑内容、调整排版,却发现PDF无法直接编辑,重新打字又费时费力。很多人不知道,微信不用下载任何APP、不用电脑,就能直接把PDF转成可编辑的Word文档&#…

阅读更多 →
2026届毕业生实测:五大AI科研网站+TaoToken配置避坑指南 2026/10/1 14:34:56

2026届毕业生实测:五大AI科研网站+TaoToken配置避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
意识量子观察者的本体、内外时空结构| 赵杰 | 量子感知论 2026/10/1 14:34:44

意识量子观察者的本体、内外时空结构| 赵杰 | 量子感知论

作者:赵杰 清华大学硕士、微美全息云科技(NASDAQ:WIMI)董事长、微算法科技(NASDAQ:MLGO)董事长、育杰奖学金创始人 基础公理体系(本套推演的逻辑基石) 公理1:爱子是最基础的意识‑观察者单元。爱子不等同电子、光子这类物质量子;物…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉