为什么 xunit 不允许测试带参数的方法?
我正在学习使用单元测试,我创建一个项目,添加 xunit 引用。 和以下代码:
namespace UnitTestProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[Fact]
private void test(int number1, string number2)
{
int result = number1 + Convert.ToInt32(number2);
Assert.IsType(Type.GetType("Int32"), result);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
当我使用 xunit gui 工具运行测试时,它说:
UnitTestProject.Form1.test:System.InvalidOperationException:事实 方法 UnitTestProject.Form1.test 不能有参数堆栈跟踪: 于Xunit.Sdk.FactCommand.Execute(Object testClass)
Xunit.Sdk.FixtureCommand.Execute(Object testClass)
Xunit.Sdk.BeforeAfterCommand.Execute(Object testClass)
Xunit.Sdk.LifetimeCommand.Execute(Object testClass)
Xunit.Sdk.ExceptionAndOutputCaptureCommand.Execute(Object testClass)
那么,如何使用参数测试方法/函数?
I am learning to use unit test, i create a project, add xunit reference.
And following codes:
namespace UnitTestProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[Fact]
private void test(int number1, string number2)
{
int result = number1 + Convert.ToInt32(number2);
Assert.IsType(Type.GetType("Int32"), result);
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
When i run the test using xunit gui tool, it said:
UnitTestProject.Form1.test : System.InvalidOperationException : Fact
method UnitTestProject.Form1.test cannot have parameters Stack Trace:
於 Xunit.Sdk.FactCommand.Execute(Object testClass)
Xunit.Sdk.FixtureCommand.Execute(Object testClass)
Xunit.Sdk.BeforeAfterCommand.Execute(Object testClass)
Xunit.Sdk.LifetimeCommand.Execute(Object testClass)
Xunit.Sdk.ExceptionAndOutputCaptureCommand.Execute(Object testClass)
So, how can i test the method/function with parameters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您也可以使用
[Theory]
代替[Fact]
。它将允许您创建具有不同参数的测试方法。例如
ps 对于 xUnit,最好公开测试方法。
Also you can use
[Theory]
instead of[Fact]
. It will allow you to create test methods with different parameters.E.g.
p.s. With xUnit it would be better to make test methods public.
关于测试中的随机值和内联方法/变量。
此代码为您的测试生成 100 个随机整数/字符串对。
About random values and inline methods/variables in tests.
This code generates 100 random int/string pairs for your test.
xunit 如何知道提供什么作为参数的值?单元测试需要是一个独立的测试,它使用数据设置环境,执行所需的操作,然后断言结果是预期的。您的测试不是独立的,因为它依赖于
number1
和number2
的外部值。尝试以下操作:需要注意的是,您尝试执行的操作(参数化单元测试)可以使用 Pex 工具
How would xunit know what to supply as values for the arguments? A unit test needs to be a self contained test which sets up an environment with data, performs the required action, and then asserts that the results are what are expected. Your test is not self contained because it relies on external values for
number1
andnumber2
. Try the following:Something to note, what you are trying to do (parameterized unit testing) is possible with the Pex tool