我需要一个解决方案来创建 xUnit 测试吗?
Do I need a solution to create xUnit tests?
我在 .NET 6 中有一个项目,其中有一个 class 简单的控制台应用程序,我想对其进行测试。我想用 xUnit 测试创建第二个 class,但他们没有 运行。
dotnet 测试 仅打印
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
Additionally, path to test adapters can be specified using /TestAdapterPath command. Example /TestAdapterPath:<pathToCustomAdapters>.
Tests.cs
using Xunit;
namespace b;
public class Tests
{
[Fact]
public void One()
{
Assert.True(Parser.Check("{}{}{}"));
}
}
Program.cs
using b;
do
{
string line = Console.ReadLine();
Console.WriteLine(Parser.Check(line));
}while(true);
Parser.cs
namespace b;
public class Parser
{
static Stack<char> s = new Stack<char>();
public Parser()
{ }
static public bool Check(string stringToCheck)
{
int i = 0;
do
{
if(i < stringToCheck.Length - 1)
{
do
{
s.Push(stringToCheck[i++]);
} while (stringToCheck[i] != ')' && stringToCheck[i] != '}' && stringToCheck[i] != ']');
} else
s.Push(stringToCheck[i]);
if (stringToCheck[i] == ')')
{
if (s.Peek() == '(')
s.Pop();
else
return false;
} else if (stringToCheck[i] == '}')
{
if (s.Peek() == '{')
s.Pop();
else
return false;
} else if (stringToCheck[i] == ']')
{
if (s.Peek() == '[')
s.Pop();
else
return false;
}
i++;
} while (i < stringToCheck.Length);
return true;
}
}
我是否需要构建整个解决方案并创建两个单独的项目 - 一个用于当前应用程序,第二个用于测试?有没有更简单的方法?
从外观上看,您不只有一个 class,而是两个:Program.cs
和 Parser.cs
简单快速的解决方案并不总是最好的。我建议创建另一个测试项目(尤其是使用 IDE 之类的 Visual Studio 来帮助您生成测试项目)并在其中添加测试 class 或 classes。
将测试项目与生产代码分开是有令人信服的理由的。
- 由于所有测试都在与生产代码相同的项目中,因此您必须将测试与成品一起发送。
- 由于您必须将测试与成品一起发送,因此其依赖项(xUnit 运行ner、VS 测试 SDK 等)也将自动包含在您的部署中。
- 在某些时候,您或维护项目的其他人可能无法确定生产代码在哪里结束以及测试代码从哪里开始。结果是,如果您不小心,最终可能会在生产中调用一些不合标准的测试代码或模拟。
- “他们没有运行”。这是因为您正在构建可执行文件,而 xUnit 期望测试位于 class 库 (DLL) 中。此外,包含测试的 class 库必须针对可执行框架(而不是像 .NET Standard 这样的可移植框架)。
将测试分离到另一个项目背后的想法将帮助您避免所有这些问题,使您的部署规模更小,并使您的项目随着时间的推移更易于维护。所以是的,您应该创建一个包含 2 个独立项目的解决方案。
我什至建议你更进一步,在你的解决方案的根目录下添加一个顶级 /src
和 /test
目录,这样以后如果你有更多的程序集,有一个合乎逻辑的放置它们并为每个环境共享通用配置的地方。
我在 .NET 6 中有一个项目,其中有一个 class 简单的控制台应用程序,我想对其进行测试。我想用 xUnit 测试创建第二个 class,但他们没有 运行。
dotnet 测试 仅打印
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
Additionally, path to test adapters can be specified using /TestAdapterPath command. Example /TestAdapterPath:<pathToCustomAdapters>.
Tests.cs
using Xunit;
namespace b;
public class Tests
{
[Fact]
public void One()
{
Assert.True(Parser.Check("{}{}{}"));
}
}
Program.cs
using b;
do
{
string line = Console.ReadLine();
Console.WriteLine(Parser.Check(line));
}while(true);
Parser.cs
namespace b;
public class Parser
{
static Stack<char> s = new Stack<char>();
public Parser()
{ }
static public bool Check(string stringToCheck)
{
int i = 0;
do
{
if(i < stringToCheck.Length - 1)
{
do
{
s.Push(stringToCheck[i++]);
} while (stringToCheck[i] != ')' && stringToCheck[i] != '}' && stringToCheck[i] != ']');
} else
s.Push(stringToCheck[i]);
if (stringToCheck[i] == ')')
{
if (s.Peek() == '(')
s.Pop();
else
return false;
} else if (stringToCheck[i] == '}')
{
if (s.Peek() == '{')
s.Pop();
else
return false;
} else if (stringToCheck[i] == ']')
{
if (s.Peek() == '[')
s.Pop();
else
return false;
}
i++;
} while (i < stringToCheck.Length);
return true;
}
}
我是否需要构建整个解决方案并创建两个单独的项目 - 一个用于当前应用程序,第二个用于测试?有没有更简单的方法?
从外观上看,您不只有一个 class,而是两个:Program.cs
和 Parser.cs
简单快速的解决方案并不总是最好的。我建议创建另一个测试项目(尤其是使用 IDE 之类的 Visual Studio 来帮助您生成测试项目)并在其中添加测试 class 或 classes。
将测试项目与生产代码分开是有令人信服的理由的。
- 由于所有测试都在与生产代码相同的项目中,因此您必须将测试与成品一起发送。
- 由于您必须将测试与成品一起发送,因此其依赖项(xUnit 运行ner、VS 测试 SDK 等)也将自动包含在您的部署中。
- 在某些时候,您或维护项目的其他人可能无法确定生产代码在哪里结束以及测试代码从哪里开始。结果是,如果您不小心,最终可能会在生产中调用一些不合标准的测试代码或模拟。
- “他们没有运行”。这是因为您正在构建可执行文件,而 xUnit 期望测试位于 class 库 (DLL) 中。此外,包含测试的 class 库必须针对可执行框架(而不是像 .NET Standard 这样的可移植框架)。
将测试分离到另一个项目背后的想法将帮助您避免所有这些问题,使您的部署规模更小,并使您的项目随着时间的推移更易于维护。所以是的,您应该创建一个包含 2 个独立项目的解决方案。
我什至建议你更进一步,在你的解决方案的根目录下添加一个顶级 /src
和 /test
目录,这样以后如果你有更多的程序集,有一个合乎逻辑的放置它们并为每个环境共享通用配置的地方。