gpt4 book ai didi

c# - visual studio 2012单元测试CRUD操作

转载 作者:太空狗 更新时间:2023-10-29 21:22:45 24 4
gpt4 key购买 nike

我正在 Visual Studio 2012 中测试创建类

我的 Controller 类是:

  public ActionResult Create()
{
return View();
}

//
// POST: /Member/Create

[HttpPost]
public ActionResult Create(Member member)
{
if (ModelState.IsValid)
{
db.Members.Add(member);
db.SaveChanges();
return RedirectToAction("Index");
}

return View(member);
}

测试类是:

[TestClass]
public class MemberTest
{

[TestMethod]
public void Create(Member mem)
{
mem.MemID = 123;
mem.MemName = "sruthy";


/// dont know what is writing.

}
}

示例数据上下文.cs

public class SampleDataContext:DbContext
{
public DbSet<Member> Members { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}

我卡在测试用例中了,请帮助我。

最佳答案

首先 - 为您的数据访问代码创建一个抽象(模拟 DbContext 不是很方便的事情):

public interface IMemberRepository
{
void Add(Member member);
}

并让你的 Controller 依赖于它

public MemberController(IMemberRepository repository)
{
this.repository = repository;
}

这将使模拟数据访问代码变得容易。接下来 - 编写验证 Controller 行为的测试(我在这里使用 NUnit 和 Moq):

private MemberController controller;
private Mock<IMemberRepository> repositoryMock;
private Member member;

[SetUp]
public void Setup()
{
repositoryMock = new Mock<IMemberRepository>();
controller = new MemberController(repositoryMock.Object);
member = new Member { MemID = 123, MemName = "sruthy" };
}

[Test]
public void ShouldCreateMemberWhenItIsValid()
{
var result = (RedirectToRouteResult)controller.Create(member);
Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
repositoryMock.Verify(r => r.Add(member));
}

[Test]
public void ShouldNotCreateMemberWhenItIsNotValid()
{
controller.ModelState.AddModelError("MemName", "Something wrong");
var result = (ViewResult)controller.Create(member);
Assert.That(result.ViewName, Is.Empty);
}

并编写实现:

[HttpPost]
public ActionResult Create(Member member)
{
if (ModelState.IsValid)
{
repository.Add(member);
return RedirectToAction("Index");
}

return View(member);
}

关于c# - visual studio 2012单元测试CRUD操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19091082/

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