【发布时间】:2021-08-02 08:55:18
【问题描述】:
我正在尝试在 .Net 5.0 和 NUnit 中进行简单的模拟测试。它适用于一切,但不适用于特定方法......我找不到解决方案。
首先我有一个逻辑类:
public class GameBusiness : IGameBusiness
{
private readonly IGameRepository _gameRepository;
public GameBusiness(IGameRepository gameRepository)
{
_gameRepository = gameRepository;
}
public async Task<Game> CreateGame()
{
var drawCard = GenerateRandomCardValue();
var newGame = new Game() { LastDrawedCard = drawCard };
return await _gameRepository.Insert(newGame);
}
public async Task<Game> GetGame(int gameId)
{
return await _gameRepository.GetById(gameId);
}
private int GenerateRandomCardValue()
{
var random = new Random();
return random.Next(1, 13);
}
}
在我的测试课中,我有
private readonly Mock<IGameRepository> _gameRepository = new Mock<IGameRepository>();
private readonly GameBusiness _gameBusiness;
public GameRepositoryTest()
{
_gameBusiness = new GameBusiness(_gameRepository.Object);
}
[SetUp]
public void Setup()
{
}
[Test]
public async Task GetGame_ShouldReturnGame_WhenGameExists()
{
var gameId = 5;
var game = new Game()
{
Id = 5,
LastDrawedCard = 3
};
_gameRepository.Setup(x => x.GetById(gameId)).ReturnsAsync(game);
var gameResult = await _gameBusiness.GetGame(5);
Assert.AreEqual(gameId, gameResult.Id);
}
[Test]
public async Task CreateGame_ShouldReturnNewGameWithLastDrawedCard()
{
var newGame = new Game()
{
Id = 5,
LastDrawedCard = 3
};
_gameRepository.Setup(x => x.Insert(new Game())).ReturnsAsync(newGame);
var newGameResult = await _gameBusiness.CreateGame();
Assert.IsTrue(newGame.LastDrawedCard > 0);
}
}
所以我的问题是在 CreateGame_ShouldReturnNewGameWithLastDrawedCard() 内部我创建了一个模拟,它应该返回给我一个与 newGame 关联的 Game 对象。但它总是返回 null。 调试时,CreateGame()中的行返回null
return await _gameRepository.Insert(newGame);
对于其他方法,例如
_gameRepository.Setup(x => x.GetById(gameId)).ReturnsAsync(game);
var gameResult = await _gameBusiness.GetGame(5);
完美运行。我在这里缺少什么?
【问题讨论】:
标签: c# .net unit-testing .net-core nunit