我已经浏览了之前的所有答案,但没有一个能解决我的问题。
假设我有以下代码:
public interface ISomeInterface
{
int SomeMethod(int a, string b);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个常见的模拟类,它定义了上述方法的一些默认行为
public class CommonMock
{
public Mock<ISomeInterface> MockInterface = new Mock<ISomeInterface>().Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)
我需要一些默认行为,因为我有很多需要默认行为的测试用例。
但在某些特定的测试场景中,在完全独立的测试类中,我需要能够在测试某些特定的测试用例时返回不同的值。
像下面这样:
[Test]
public void TestSomeMethodSpecific()
{
var commonMock = new CommonMock();
commonMock.MockInterface.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(42);
// Do some test based on the new return value
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
下面我附上一些实际代码:
通用设置
public class MockStore
{
public Mock<IProcessHandler> ProcessHandler = new Mock<IProcessHandler>();
ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)
测试类中覆盖的设置
var mockstore = new MockStore();
mockStore.ProcessHandler.Setup(x => …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 Azure EventGrid 将事件发布到Azure.Messaging.EventGridEvent.EventGridPublisherClient,效果很好。我刚刚发现 EventGrid 还有另一个客户端,即Microsoft.Azure.EventGrid.EventGridClient.
经过调查,库和命名空间都实现了相同的目标,但公开了截然不同的方法和属性,并且处理序列化和反序列化的方式也Data截然不同;whileMicrosoft.Azure.EventGrid.EventGridEvent直接将Data属性公开为public属性,Azure.Messaging.EventGridEventhasData作为internal属性并且仅公开诸如GetData<T>、 和 之类的方法GetDataAsync<T>。
让两个库做几乎相似的事情让我完全困惑,不知道哪个是正确的库。对于我们何时应该使用一个库而不是另一个库,是否有任何指导原则?使用其中一种比另一种有什么好处吗?我尝试查看文档,但无法辨别有关这两个库的正确用法的任何信息。