AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1860384
Accepted
KyleMit
KyleMit
Asked: 2024-10-31 23:06:32 +0800 CST2024-10-31 23:06:32 +0800 CST 2024-10-31 23:06:32 +0800 CST

有没有办法在.net fiddle 上运行单元测试?

  • 772

我很想使用 dotnet fiddle(https://dotnetfiddle.net/)通过单元测试演示一些行为

Fiddle 通常构建为控制台应用程序,通过 Program.Main 调用

但测试通常在类库中运行,调用方式如下dotnet test

有没有什么办法可以让测试顺利进行?

示例小提琴 (测试不起作用)

示例测试

public class CalculatorTests
{
    [Fact]
    public void Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
    {
        // Arrange
        var calculator = new Calculator();
        
        // Act
        var result = calculator.Add(2, 3);

        // Assert
        Assert.Equal(5, result);
    }

    private class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

注意:这个问题的代码部分可能也与 StackOverflow 相关,但我特别想在 dotnetfiddle 的上下文中实现它。代码在本地运行良好

.net-framework
  • 1 1 个回答
  • 56 Views

1 个回答

  • Voted
  1. Best Answer
    cxanter
    2024-11-14T14:43:41+08:002024-11-14T14:43:41+08:00

    正如 Frank Thomas 在评论中提到的,无法像在本地一样在 .Net Fiddle 中运行单元测试。他还提到,您可以创建自己的运行器来执行测试,作为 .Net Fiddle 提供的控制台应用程序的一部分。但是,您不必从头开始创建这些运行器:两者都NUnit提供XUnit了(相当)轻松地执行此操作的方法。

    我尝试了这两个框架,但不幸的是只能NUnit在 .Net Fiddle 中工作(似乎他们使用了一种反射无法正常工作的方式来运行项目)。

    该方法在jdoodleXUnit中确实有效(也许在其他在线编辑器中也有效,在我找到一个有效的编辑器后我就停止尝试了)。

    所以您需要做出一个折衷的决定:要么切换到NUnit并坚持使用 .Net Fiddle,要么坚持XUnit并切换到其他在线编辑器......

    NUnitLite 运行器

    Dotnet Fiddle 中的演示

    以下代码片段应可在使用该NUnitLite包的 .Net Fiddle 上运行。(感谢我的同事 Markus 向我展示此内容)

    
    // configure the editor to reference the following packages:
    // * NUnit
    // * NUnitLite
    
    // Shortcut for .Net Fiddle:
    // @nuget: NUnit
    // @nuget: NUnitLite
    
    using NUnit.Framework;
    using Assert = NUnit.Framework.Legacy.ClassicAssert;
    
    public class CalculatorTests
    {
        [Test]
        public void Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
        {
            // Arrange
            var calculator = new Calculator();
    
            // Act
            var result = calculator.Add(2, 3);
    
            // Assert
            Assert.AreEqual(5, result);
        }
    
        private class Calculator
        {
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }
    
    public class Program
    {
        public static void Main()
        {
            new NUnitLite.AutoRun().Execute(["--noc" /*no colored output for .Net Fiddle*/]);
        }
    }
    

    XUnit 运行器

    JDoddle 中的演示

    解决方案XUnit很大程度上受到StackOverflow上的这个问题和XUnit repo中的这个示例的启发(可以在那里找到更多解释)。我在jdoodle上尝试过,没有问题,但请注意,与示例代码相比,我采取了一些捷径。

    
    // configure the editor to reference the following packages:
    // * XUnit
    // * XUnit.Runner.Utility
    
    using System;
    using System.Reflection;
    using System.Threading;
    using Xunit;
    using Xunit.Runners;
    
    public class CalculatorTests
    {
        [Fact]
        public void Add_WhenCalledWithTwoIntegers_ReturnsTheirSum()
        {
            // Arrange
            var calculator = new Calculator();
    
            // Act
            var result = calculator.Add(2, 3);
    
            // Assert
            Assert.Equal(5, result);
        }
    
        [Fact]
        public void Nope()
        {
            Assert.Equal(5, 3);
        }
    
        private class Calculator
        {
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }
    
    internal static class Program
    {
        static void Main(string[] args)
        {
            var finished = new ManualResetEvent(false);
            using var runner = AssemblyRunner.WithoutAppDomain(Assembly.GetCallingAssembly().Location);
            runner.OnExecutionComplete = info => OnExecutionComplete(info, finished);
            runner.OnTestFailed = OnTestFailed;
            runner.OnTestPassed = OnTestPassed;
    
            runner.Start();
    
            finished.WaitOne();
        }
    
        private static void OnTestPassed(TestPassedInfo info) => 
            Console.WriteLine("[PASS] {0}", info.TestDisplayName);
    
        static void OnTestFailed(TestFailedInfo info) => 
            Console.WriteLine("[FAIL] {0}\n{1}", info.TestDisplayName, info.ExceptionMessage);
    
        static void OnExecutionComplete(ExecutionCompleteInfo info, ManualResetEvent finished) => 
            finished.Set();
    }
    

    我希望这就是您所寻找的!

    • 1

相关问题

  • WinForm 上的 System.Configuration.ConfigurationErrorsException

  • Microsofi .NET Framework Windows 10 在安装过程中未被多个程序看到

  • 没有启用 .NET Core 预览版的选项

  • Visual Studio 2019 发布先决条件对话框缺少 .NET Framework 4.8

  • 为 Visual Studio 15.9.11(专业版)获取 .NET 4.7.2 的问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve