我正在尝试锻炼,如果它是我做错了,或者是moq或NUnit中的问题.我正在调用soap端点,我的服务引用正在生成同步和异步方法.我正在打电话,看起来像是:
public async Task DoThisAsync(idnameobject myobj, int id)
{
await ws.DoSomethingAsync(myobj, id);
}
Run Code Online (Sandbox Code Playgroud)
我正在设置我的moq来返回回调,所以我可以将我称之为Web服务的参数与之集成.我的测试看起来像:
var callback = new idnameobject();
wsMock
.SetUp(w => w.DoSomethingAsync(It.IsAny<idnameobject>(), It.IsAny<int>())
.Callback<idnameobject, int>((obj, id) => callback = obj);
await myservice.DoThisAsync(myobj, id);
Assert.That(callback.Id, Is.EqualTo(myobj.Id));
Run Code Online (Sandbox Code Playgroud)
此时,我在调用my方法时得到一个空引用异常,该方法不包含堆栈跟踪中的任何信息.我只有Exception thrown: 'System.AggregateException' in mscorlib.dll输出.
奇怪的是,如果我从同步方法设置回调并更改我的方法来调用它,它就不会失败.
如果我调用只有一个参数的异步方法,它也不会失败.
如果有人有任何想法,请告诉我,因为我的测试不想改变我的方法,但理想情况下我希望我的测试确保我正确地调用Web服务.
我已经使用许多应用程序订阅的主题将 azure 服务总线的实现编写到我们的应用程序中。我们团队的讨论之一是我们是否坚持使用单个主题并通过消息的属性进行过滤,或者为我们的特定需求创建一个主题。
我们的场景是希望通过优先级和环境变量进行过滤(测试和 uat 环境共享连接)。
那么我们有主题吗(类似):
或者,只是将这些值设置为两个属性的单个主题?
我的偏好是我们创建单独的主题,因为我们将利用可用的功能,并且我想在高负载下这会更好地扩展?我读过查看大队列可能效率低下。订阅单个主题似乎也更干净。
任何意见,将不胜感激。
在我们的代码库中,我们有一个基本模型 ( PersistenceEntity),它处理通过通用存储库持久存储到存储中的任何模型。这适用于获取、添加和删除。我想要改进的地方是我们的 update 方法被封装在存储库中,而不是在服务层中获取对象,对其进行操作(以开发人员认为合适的任何方式)然后保存它。
存储库更新方法应该在内部加载模型,调用对象上的更新方法然后保存它(或调用 AddOrUpdate 扩展)。
为此,我想我可以在基类上添加一个抽象方法,以强制开发人员在模型中实现更新,而不是在另一层中设置属性。
public abstract T Update<T>(T existing) where T : PersistenceEntity;
Run Code Online (Sandbox Code Playgroud)
因此,这将使开发人员编写一个像这样的模型:
public class MyClass : PersistenceEntity
{
public override MyClass Update<MyClass>(MyClass existing)
{
existing.SomeProperty = SomeProperty;
existing.SomeProperty2 = SomeProperty2;
return existing;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我以这种方式实现它时,编译器会抱怨它认为MyClass是 T 的名称而不是具体的类。我想我在这里遗漏了一些明显的东西,但我看不到它......任何建议将不胜感激。
我们正在使用 DevOps 来构建我们的 .net 4.7.2 应用程序。作为其中的一部分,我们正在运行使用 nunit 框架和测试运行器的单元测试。
它已经正常运行了大约 18 个月,但在最后一天刚刚停止工作:(
它使用标准模板来运行测试,如下所示:
- task: VSTest@2
displayName: "Running tests"
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'
Run Code Online (Sandbox Code Playgroud)
但是,现在该步骤失败并显示以下日志:
NUnit 适配器 4.2.0.0:测试执行开始运行 D:\a\1\s\Configuration.Tests\bin\Release\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 中的所有测试 NUnit3TestExecutor 使用 Current Discovery 发现 0 个 NUnit 测试用例中的 0 个模式,显式运行 运行 D:\a\1\s\Configuration.Tests\bin\Release\testcentric.engine.metadata.dll 中的所有测试 NUnit3TestExecutor 使用当前发现模式发现 0 个 NUnit 测试用例中的 0 个,显式运行 运行所有测试在 D:\a\1\s\Api.Tests\bin\Release\testcentric.engine.metadata.dll 中,NUnit3TestExecutor 使用当前发现模式发现了 0 个 NUnit 测试用例中的 0 个,显式运行 在 D:\a\1 中运行所有测试\s\CommunicationTests\bin\Release\testcentric.engine.metadata.dll NUnit3TestExecutor 使用当前发现模式发现 0 个 NUnit 测试用例中的 0 个,显式运行 运行 D:\a\1\s\Domain.Tests\bin\ 中的所有测试Release\testcentric.engine.metadata.dll …
我不确定这是否是 Visual Studio 的更新,或者我们的 IT 团队对我们的机器/基础设施所做的事情,但在调试 Visual Studio 2022 时,我无法再将 DateTime 视为字符串(我想是 ToString())。
例如:
现在我可以弄清楚了,但它比"2024-01-01 00:00:00"更难看。
如果有人可以提供帮助,我将不胜感激,我已经查看了 VS 中我认为相关的设置,但我看不到任何东西!
c# ×3
nunit ×2
asynchronous ×1
azure ×1
azure-devops ×1
datetime ×1
debugging ×1
devops ×1
generics ×1
moq ×1
mstest ×1
servicebus ×1
tdd ×1