gpt4 book ai didi

c# - 在 JustMock 中找不到 TestFixtureSetUpAttribute?

转载 作者:行者123 更新时间:2023-11-30 14:06:43 30 4
gpt4 key购买 nike

我正在使用 C#、.NET Framework 4.7、Nunit 3.8.0 和 JustMock Lite 2017.2.821.1 开发 TDD 测试。

当我这样做时:

IGenericRepository<ProductionOrder> _proOrdRepository = 
Mock.Create<IGenericRepository<ProductionOrder>>();

我得到以下异常:

System.TypeInitializationException occurred
HResult=0x80131534
Message=An exception occurred in the type initializer of 'Telerik.JustMock.Core.Context.MockingContext'.
Source=Telerik.JustMock
StackTrace:
at Telerik.JustMock.Core.Context.MockingContext.get_CurrentRepository()
at Telerik.JustMock.Mock.<>c__44`1.<Create>b__44_0()
at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal[T](Func`1 guardedAction)
at Telerik.JustMock.Mock.Create[T]()
at MyProjects.Tests.LoadFinishedTrzlBatchTest.SetUpLoadFinishedTrzlBatch() in D:\MyProjects\MyProject\LoadFinishedTrzlBatchTest.cs:line 25

Inner Exception 1:
InvalidOperationException: Some attribute type among NUnit.Framework.TestFixtureSetUpAttribute, nunit.framework,NUnit.Framework.TestFixtureTearDownAttribute, nunit.framework not found.

这是我第一次使用 TDD 和 JustMock 做一些事情,我不知道如何解决这个问题。

我的测试类是:

[TestFixture]
class LoadFinishedTrzlBatchTest
{
private LoadFinishedTrzlBatch sut;
private IGenericRepository<ProductionOrder> _proOrdRepository;

[SetUp]
public void SetUpLoadFinishedTrzlBatch()
{
_proOrdRepository =
Mock.Create<IGenericRepository<ProductionOrder>>();
var batchRepository =
Mock.Create<IGenericRepository<Batch>>();
var codeRepository =
Mock.Create<IGenericRepository<Code>>();
var aggRepository =
Mock.Create<IGenericRepository<Aggregation>>();
var aggChildrenRepository =
Mock.Create<IGenericRepository<AggregationChildren>>();

sut = new LoadFinishedTrzlBatch(
_proOrdRepository,
batchRepository,
codeRepository,
aggRepository,
aggChildrenRepository);
}

[TestCaseSource(nameof(ShouldThrowArgumentSource))]
public void ShouldThrowArgumentExceptionWithInvalidProductionOrderName(string productionOrderName)
{
// Assert
Assert.That(() => sut.ExistsProductionOrder(productionOrderName), Throws.TypeOf<ArgumentNullException>());
}

[Test]
public void ShouldExistsProductionOrder()
{

// Arrange
var productionOrderName = "ProOrd";
var orders = new List<ProductionOrder>() {
new ProductionOrder { Name = productionOrderName },
new ProductionOrder { Name = "Dummy for Filter" }
};

Mock.Arrange(() => _proOrdRepository
.SearchFor(Arg.IsAny<Expression<Func<ProductionOrder, bool>>>()))
.Returns((Expression<Func<ProductionOrder, bool>> expression) =>
orders.Where(expression.Compile()).AsQueryable())
.MustBeCalled();

// Act
var actual = sut.ExistsProductionOrder(productionOrderName);

// Assert
Assert.IsTrue(actual);
}

private static IEnumerable ShouldThrowArgumentSource()
{
yield return string.Empty;
yield return null;
yield return " ";
}
}

有什么想法吗?

更新:

我删除了 SetUpLoadFinishedTrzlBatch 方法并将所有内容移动到 ShouldExistsProductionOrder 方法中,我得到了同样的错误。

[Test]
public void ShouldExistsProductionOrder()
{
LoadFinishedTrzlBatch sut;
IGenericRepository<ProductionOrder> _proOrdRepository;

_proOrdRepository =
Mock.Create<IGenericRepository<ProductionOrder>>();
var batchRepository =
Mock.Create<IGenericRepository<Batch>>();
var codeRepository =
Mock.Create<IGenericRepository<Code>>();
var aggRepository =
Mock.Create<IGenericRepository<Aggregation>>();
var aggChildrenRepository =
Mock.Create<IGenericRepository<AggregationChildren>>();

sut = new LoadFinishedTrzlBatch(
_proOrdRepository,
batchRepository,
codeRepository,
aggRepository,
aggChildrenRepository);

// Arrange
var productionOrderName = "ProOrd";
var orders = new List<ProductionOrder>() {
new ProductionOrder { Name = productionOrderName },
new ProductionOrder { Name = "Dummy for Filter" }
};

Mock.Arrange(() => _proOrdRepository
.SearchFor(Arg.IsAny<Expression<Func<ProductionOrder, bool>>>()))
.Returns((Expression<Func<ProductionOrder, bool>> expression) =>
orders.Where(expression.Compile()).AsQueryable())
.MustBeCalled();

// Act
var actual = sut.ExistsProductionOrder(productionOrderName);

// Assert
Assert.IsTrue(actual);
}

我认为问题出在 JustMock 上。

最佳答案

JustMock relies on TestFixtureSetUpAttribute and TestFixtureTearDownAttribute对于 NUnit 3 和 NUnit 2。

这两个属性在 NUnit 3.0 中被弃用,并且刚刚在 NUnit 3.8 中被删除。 JustMock 应该更新以使用它们的替代品,OneTimeSetUpOneTimeTearDown

作为用户 - 在解决此问题之前,您不能使用高于 NUnit 3.7.1 的版本。您可以将问题报告给 JustMock here .

该问题自 JustMock 2018 R1 版本发布后已修复。

关于c# - 在 JustMock 中找不到 TestFixtureSetUpAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45932110/

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