MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    Mirai Core 开发功能怎么测试

    开发交流
    3
    11
    555
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      mai1015 最后由 编辑

      我想给Mirai contribute添加一个新的协议,但是怎么样对代码进行一个测试呢?如果要测试协议类的怎么测试呢?麻烦大佬解答一下目前mirai的开发流程。谢谢!

      1 条回复 最后回复 回复 引用 0
      • RainChan
        RainChan 摸鱼 最后由 编辑

        可以看文档的贡献部分

        M 1 条回复 最后回复 回复 引用 0
        • M
          mai1015 @RainChan 最后由 编辑

          @RainChan 在 Mirai Core 开发功能怎么测试 中说:

          可以看文档的贡献部分

          好吧明白了,但是遇到了一个问题 编译的时候这个测试失败了。能不能麻烦解答一下?

          > Task :mirai-core:jvmTest
          
          FlashImageProtocolTest[jvm] > group FlashImage send()[jvm] FAILED
              org.opentest4j.AssertionFailedError at FlashImageProtocolTest.kt:111
          
          301 tests completed, 1 failed
          
          org.opentest4j.AssertionFailedError: Failed to check single Protocol ==> expected: <net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Elem(
              commonElem = net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.CommonElem(
                  serviceType = 3,
                  pbElem = "0A 43 12 2A 7B 46 39 37 36 34 36 42 42 2D 41 36 44 32 2D 37 30 34 34 2D 36 30 43 36 2D 35 45 35 38 34 35 41 32 31 42 34 45 7D 2E 6A 70 67 6A 10 F9 76 46 BB A6 D2 70 44 60 C6 5E 58 45 A2 1B 4E 92 02 02 78 06".hexToBytes(),
              ),
          ), net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Elem(
              text = net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Text(
                  str = "[闂収]璇蜂娇鐢ㄦ柊鐗堟墜鏈篞Q鏌ョ湅闂収銆�",
              ),
          )> but was: <net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Elem(
              commonElem = net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.CommonElem(
                  serviceType = 3,
                  pbElem = "0A 43 12 2A 7B 46 39 37 36 34 36 42 42 2D 41 36 44 32 2D 37 30 34 34 2D 36 30 43 36 2D 35 45 35 38 34 35 41 32 31 42 34 45 7D 2E 6A 70 67 6A 10 F9 76 46 BB A6 D2 70 44 60 C6 5E 58 45 A2 1B 4E 92 02 02 78 06".hexToBytes(),
              ),
          ), net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Elem(
              text = net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody.Text(
                  str = "[闪照]请使用新版手机QQ查看闪照。",
              ),
          )>
          	at app//org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
          	at app//org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
          	at app//org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
          	at app//org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1135)
          	at app//kotlin.test.junit5.JUnit5Asserter.assertEquals(JUnitSupport.kt:32)
          	at app//net.mamoe.mirai.internal.message.protocol.impl.EqualityAsserter$Structural.assertEquals(EqualityAsserter.kt:70)
          	at app//net.mamoe.mirai.internal.message.protocol.impl.EqualityAsserter$OrdinaryThenStructural.assertEquals(EqualityAsserter.kt:89)
          	at app//net.mamoe.mirai.internal.message.protocol.impl.AbstractMessageProtocolTest.doEncoderChecks(AbstractMessageProtocolTest.kt:109)
          	at app//net.mamoe.mirai.internal.message.protocol.impl.AbstractMessageProtocolTest.doEncoderChecks(AbstractMessageProtocolTest.kt:219)
          	at app//net.mamoe.mirai.internal.message.protocol.impl.FlashImageProtocolTest.group FlashImage send(FlashImageProtocolTest.kt:111)
          	at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          	at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          	at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          	at java.base@11.0.15/java.lang.reflect.Method.invoke(Method.java:566)
          	at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
          	at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
          	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
          	at app//org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
          	at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
          	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
          	at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
          	at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
          	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
          	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
          	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
          	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
          	at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
          	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
          	at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
          	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
          	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
          	at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
          	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
          	at java.base@11.0.15/java.util.ArrayList.forEach(ArrayList.java:1541)
          	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
          	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
          	at java.base@11.0.15/java.util.ArrayList.forEach(ArrayList.java:1541)
          	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
          	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
          	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
          	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
          	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
          	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
          	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
          	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
          	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
          	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
          	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
          	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
          	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
          	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
          	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
          	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
          	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
          	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
          	at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          	at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          	at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          	at java.base@11.0.15/java.lang.reflect.Method.invoke(Method.java:566)
          	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
          	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
          	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
          	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
          	at com.sun.proxy.$Proxy2.stop(Unknown Source)
          	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
          	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
          	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
          	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
          	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
          	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
          	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
          	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
          	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
          
          1 条回复 最后回复 回复 引用 0
          • RainChan
            RainChan 摸鱼 最后由 编辑

            会不会是编码问题,你可以检查一下测试代码

            1 条回复 最后回复 回复 引用 0
            • M
              mai1015 最后由 编辑

              我检查过了一下,文件的是utf-8编码。只有group FlashImage send 运行失败。但已经强制所有文件和编译到utf8

              1 条回复 最后回复 回复 引用 0
              • Him188
                Him188 最后由 编辑

                文档会在 #2048 逐渐更新

                M 1 条回复 最后回复 回复 引用 0
                • M
                  mai1015 @Him188 最后由 编辑

                  @Him188 好的谢谢,我看到了。
                  在mamoe/mirai里面能直接启动mirai-console登陆账号进行测试吗?还是只能写test case?

                  1 条回复 最后回复 回复 引用 0
                  • Him188
                    Him188 最后由 编辑

                    你可以在 https://github.com/mamoe/mirai/tree/native-target/docs/contributing 了解即将到来的多平台架构,以及在 https://github.com/mamoe/mirai/blob/native-target/docs/contributing/ImplementingProtocol.md 查看实现新消息协议的方法

                    1 条回复 最后回复 回复 引用 0
                    • M
                      mai1015 最后由 编辑

                      好吧我明白了,那我试试看重新写一下吧。那登录测试账号在本地环境进行收发消息测试有没有例子可以参考呢?

                      1 条回复 最后回复 回复 引用 0
                      • Him188
                        Him188 最后由 编辑

                        mirai-core 的 commonTest 的 message 包中有 MessageProtocolTest

                        1 条回复 最后回复 回复 引用 0
                        • Him188
                          Him188 最后由 编辑

                          这个多平台变更应该是不影响你实现消息协议的。你可以继续基于 dev 开发。https://github.com/mamoe/mirai/blob/native-target/docs/contributing/ImplementingProtocol.md 这个文档可供参考,即使里面还有一些内容不完整。

                          1 条回复 最后回复 回复 引用 0
                          • 1 / 1
                          • First post
                            Last post
                          Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact