gpt4 book ai didi

c#-4.0 - SetUp 或 TearDown 方法的签名无效 - 我做错了什么?

转载 作者:行者123 更新时间:2023-12-02 16:04:50 25 4
gpt4 key购买 nike

我正在尝试使用 nUnit 为我的测试进行一些依赖注入(inject)。我是 TDD 和 nUnit 的新手,所以我可能错过了一些简单的东西。基本上我已经为我的界面创建了一个 SetUp 方法。我最初使用的是构造函数,但我读到在进行 TDD 时这样做很不好,所以我现在使用了一种方法。

当我运行测试时,我构造一个对象并将其分配给接口(interface),然后使用该接口(interface)调用一个方法。我想测试它是否可以解析字符串小数。

当我运行测试时,它说测试失败,消息是:SetUp 或 TearDown 方法的签名无效

实际代码请参见下面:

 public class DonorTests
{
private IDonor _Donor;
private IValidateInput _ValidInput;


//DonorTests(IDonor donor, IValidateInput validInput)
//{
// _Donor = donor;
// _ValidInput = validInput;
//}

[SetUp]
void Setup(IDonor donor, IValidateInput validInput)
{
_Donor = donor;
_ValidInput = validInput;
}

[Test]
public void HandleStringNotDecimal()
{
_ValidInput = new ValidateInput();
Assert.IsTrue(_ValidInput.IsDecimal("3445.3450"));
}
}

使用此接口(interface)的我的类

 public class ValidateInput : IValidateInput
{
public decimal RoundTwoDecimalPlaces(decimal amount)
{
return Math.Round(amount);
}

public bool IsDecimal(string amount)
{
decimal ParsedDecimal;
return Decimal.TryParse(amount, out ParsedDecimal);
}

public decimal ConvertToString(string value)
{
decimal ParsedDecimal;
Decimal.TryParse(value, out ParsedDecimal);
return ParsedDecimal;
}
}

最佳答案

您之前使用构造函数注入(inject)来注入(inject)依赖项,对吗?我认为您将无法使用用 SetUpAttribute 装饰的方法执行依赖项注入(inject),因为此类方法必须是无参数的。此外,Setup 方法必须是 public,请参阅 this SO thread .

我们公司通常如何处理类似情况:

[TestFixture]
public class DonorTests
{
private IDonor _Donor;
private IValidateInput _ValidInput;

[SetUp]
public void Setup()
{
_Donor = new Donor();
_ValidInput = new ValidateInput();
}

[Test]
public void HandleStringNotDecimal()
{
Assert.IsTrue(_ValidInput.IsDecimal("3445.3450"));
}
}

或者,如果 ValidInputDonor 的构造很便宜,那么我们只需为每个测试创建新实例,并为此目的使用特殊方法,以便当我们决定测试另一个实现时IValidateInput 那么只在一处更改它就足够了:

[TestFixture]
public class DonorTests
{
[Test]
public void HandleStringNotDecimal()
{
var validInput = CreateValidateInput();
Assert.IsTrue(validInput .IsDecimal("3445.3450"));
}

private static IValidateInput CreateValidateInput()
{
return new ValidateInput();
}
}

关于c#-4.0 - SetUp 或 TearDown 方法的签名无效 - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25463605/

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