私は単体テストの作成の初心者であり、機能させようとしているテストがあります。何をテストしようとしているのかを説明することから始めます。
Mvc 4 プロジェクトにメッセージを保存するメソッドをテストしようとしています。メソッドが呼び出されSaveMessage
、以下に示されます。
namespace ChatProj.Service_Layer
{
public class UserService : IUserService
{
public MessageContext messageContext = new MessageContext();
public UserService()
{
_messageRepository = new MessageRepository(messageContext);
}
private IMessageRepository _messageRepository;
-> public void SaveMessage(Message message)
{
messageContext.Messages.Add(message);
_messageRepository.Save();
}
_messageRepository.Save
メソッド内は私のSaveMessage
DAL レイヤーに実装されてMessageRepository
おり、次のようになります。
public void Save()
{
context.SaveChanges();
}
この保存方法は少し複雑に思えるかもしれませんが、データ アクセス層 ( & )で処理できる & べき (だと思う) 操作をサービス層 ( IUserService
& ) に処理させたくなかったので、この方法でプロジェクトを構成しました。 .UserService
IMessageRepository
MessageRepository
ここで、トリッキーな部分が来ます。これを単体テストする方法を理解しようとしています。これは私の試みです:
namespace ChatProj.Tests
{
[TestFixture]
class MessageRepositoryTests
{
[SetUp]
public void Setup()
{
}
[Test]
public void SaveMessage_SaveWorking_VerifyUse()
{
//Arrange
var userServiceMock = new Mock<UserService>();
var message = new Message { MessageID = 0, Name = "Erland", MessageString = "Nunit Test", MessageDate = DateTime.Now };
var repositoryMock = new Mock<IMessageRepository>();
var contextMock = new Mock<MessageContext>();
MessageRepository messageRepository = new MessageRepository(contextMock.Object);
UserService userService = new UserService();
//Act
userService.SaveMessage(message);
//Assert
repositoryMock.Verify(m => m.Save());
userServiceMock.Verify(m => m.SaveMessage(message));
}
}
Imgur linkというエラーが表示されますが、解決方法がよくわかりません。他のいくつかの SO 投稿を見てみましたが、テストがうまくいきません。
ユニットテストを実際に機能させるにはどうすればよいですか?