Polyglot Notebooks 中使用 xUnit 单元测试
本文目录
- Polyglot Notebooks 中使用 xUnit 单元测试
- @[TOC](本文目录)
- Polgylot Notebooks 并没有直接支持单元测试框架。不能像VS里那样方便的进行单元测试。简单远行的话,可以使用下面的方案!
- 1、引入必要的NuGet包到.NET Interactive环境中
- 2、定义测试类和测试方法
- 3、执行测试并获取结果。在.NET Interactive中,直接运行xUnit测试并不像在Visual Studio或通过命令行那样直接。你需要手动实例化测试类并调用测试方法,或者使用反射来自动发现和执行测试方法。以下是一个简化的例子,展示如何手动执行测试方法并输出结果。
Polgylot Notebooks 并没有直接支持单元测试框架。不能像VS里那样方便的进行单元测试。简单远行的话,可以使用下面的方案!
1、引入必要的NuGet包到.NET Interactive环境中
#i "nuget:https://api.nuget.org/v3/index.json"
#r "nuget:xunit"
#r "nuget: xunit.assert"
#r "nuget:xunit.runner.visualstudio"
#r "nuget:xunit.runner.console"
2、定义测试类和测试方法
using Xunit;public class CalculatorTests
{[Fact]public void Add_ReturnsCorrectSum(){var calculator = new Calculator();var result = calculator.Add(2, 2);Assert.Equal(4, result);}[Fact]public void Subtract_ReturnsCorrectDifference(){var calculator = new Calculator();var result = calculator.Subtract(5, 3);Assert.Equal(2, result);}
}public class Calculator
{public int Add(int x, int y) => x + y;public int Subtract(int x, int y) => x - y;
}
3、执行测试并获取结果。在.NET Interactive中,直接运行xUnit测试并不像在Visual Studio或通过命令行那样直接。你需要手动实例化测试类并调用测试方法,或者使用反射来自动发现和执行测试方法。以下是一个简化的例子,展示如何手动执行测试方法并输出结果。
var calculatorTests = new CalculatorTests();
calculatorTests.Add_ReturnsCorrectSum();
calculatorTests.Subtract_ReturnsCorrectDifference();Console.WriteLine("Tests executed successfully.");
#r "nuget: xunit"
#r "nuget: xunit.assert"using Xunit;
using System.Reflection;
public class Calculator
{public int Add(int a, int b) => a + b;
}
public class CalculatorTests
{[Fact]public void Add_TwoNumbers_ReturnsSum(){var calculator = new Calculator();int result = calculator.Add(1, 2);Assert.Equal(3, result); }
}
var testInstance = new CalculatorTests();
var testMethods = testInstance.GetType().GetMethods().Where(m => m.GetCustomAttributes(typeof(FactAttribute), false).Length > 0);foreach (var method in testMethods)
{try{method.Invoke(testInstance, null);Console.WriteLine($"✅ {method.Name} 通过");}catch (Exception ex){Console.WriteLine($"❌ {method.Name} 失败: {ex.InnerException?.Message}");}
}