gpt4 book ai didi

c# - 我需要一个解决方案来创建 xUnit 测试吗?

转载 作者:行者123 更新时间:2023-12-05 02:29:08 26 4
gpt4 key购买 nike

我在 .NET 6 中有一个项目,其中包含一个简单的控制台应用程序,我想测试它。我希望用 xUnit 测试创建第二个类,但它们没有运行。

dotnet test 仅打印

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);

解析器.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;
}
}

我是否需要构建整个解决方案并创建两个单独的项目 - 一个用于当前应用程序,第二个用于测试?有没有更简单的方法?

最佳答案

有令人信服的理由说明为什么要将测试项目与生产代码分开。

  1. 由于所有测试都与生产代码位于同一个项目中,因此您必须将测试与成品一起发送。
  2. 由于您必须将测试与成品一起发送,因此其依赖项(xUnit 运行器、VS 测试 SDK 等)也将自动包含在您的部署中。
  3. 在某些时候,您或维护项目的其他人可能无法确定生产代码在哪里结束以及测试代码从哪里开始。结果是,如果不小心,您可能最终会在生产中调用一些不合标准的测试代码或模拟。
  4. “他们不跑”。这是因为您正在构建可执行文件,而 xUnit 期望测试位于类库 (DLL) 中。此外,包含测试的类库必须针对可执行框架(而不是像 .NET Standard 这样的可移植框架)。

将测试分离到另一个项目背后的想法将帮助您避免所有这些问题,使您的部署规模更小,并使您的项目随着时间的推移更易于维护。所以是的,您应该创建一个包含 2 个独立项目的解决方案。

我什至建议你更进一步,在你的解决方案的根目录下添加一个顶级 /src/test 目录,如果你有更多程序集,有一个合乎逻辑的地方来放置它们并为每个环境共享通用配置。

关于c# - 我需要一个解决方案来创建 xUnit 测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72361663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com