gpt4 book ai didi

c# - 如何断言是否使用 nunit 调用了方法

转载 作者:可可西里 更新时间:2023-11-01 03:08:53 24 4
gpt4 key购买 nike

是否可以断言一个方法是否被调用?我正在测试以下方法,我想断言 _tokenManager.GetToken() 已被调用。我只想知道该方法是否已被调用,因为该方法没有返回值。我正在使用最小起订量。

谢谢,

代码片段

public void Subscribe(string code, string emailAddress, string columnKey)
{
// Request authentication token
var token = _tokenManager.GetToken(code, false);

if (!_tokenValidator.Validate(token))
{
// Token has expired or invalid - refresh the token
token = _tokenManager.GetToken(code, true);
}

// Subscribe email
_silverpopRepository.Subscribe(token.AccessToken, emailAddress, columnKey);
}

最佳答案

您应该模拟 TokenManagerTokenValidator,然后创建两个单元测试用例:

  • 案例 1: token 已验证并且 GetToken 仅被调用一次
  • 情况 2: token 未验证并且 GetToken 被调用两次

案例一:

[Test]
public void Subscribe_TokenIsValidated_GetTokenIsCalledOnce()
{
// Arrange:
var tokenManagerMock = Mock.Of<TokenManager>();

var tokenValidatorMock = Mock.Of<TokenValidator>(x =>
x.Validate(It.IsAny<Token>()) == true);

var subscriber = new Subscriber
{
TokenManager = tokenManagerMock,
TokenValidator = tokenValidatorMock
};

// Act:
subscriber.Subscribe(It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>());

// Assert:
Mock.Get(tokenManagerMock).Verify(x =>
x.GetToken(It.IsAny<string>(), It.IsAny<bool>()), Times.Once);
}

案例二:

[Test]
public void Subscribe_TokenIsExpiredOrInvalid_GetTokenIsCalledTwice()
{
// Arrange:
var tokenManagerMock = Mock.Of<TokenManager>();

var tokenValidatorMock = Mock.Of<TokenValidator>(x =>
x.Validate(It.IsAny<Token>()) == false);

var subscriber = new Subscriber
{
TokenManager = tokenManagerMock,
TokenValidator = tokenValidatorMock
};

// Act:
subscriber.Subscribe(It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<string>());

// Assert:
Mock.Get(tokenManagerMock).Verify(x =>
x.GetToken(It.IsAny<string>(), It.IsAny<bool>()), Times.Exactly(2));
}

或者,您可以在不模拟 TokenValidator 的情况下创建单元测试,并验证是否至少调用了一次 GetToken()。但是,由于我们要测试所有代码路径,因此最好像第一个示例一样创建两个案例。

// Arrange:
var tokenManagerMock = Mock.Of<TokenManager>();
var subscriber = new Subscriber {TokenManager = tokenManagerMock};

// Act:
subscriber.Subscribe(It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<string>());

// Assert:
Mock.Get(tokenManagerMock).Verify(x =>
x.GetToken(It.IsAny<string>(), It.IsAny<bool>()), Times.AtLeastOnce);

阅读更多关于最小起订量验证的信息:

关于c# - 如何断言是否使用 nunit 调用了方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331947/

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