如何验证内部属性是否设置了正确的值?

问题描述 投票:1回答:2

这是一段代码:

[HttpPost(UriFactory.FOO_ROUTE)]

public async Task<ActionResult> AddFooAsync([FromRoute]string novelid, [FromBody]AddFoo command)
{
    var novel = await RetrieveNovel(novelid);
    if (novel == null) return NotFound();
    if (!ModelState.IsValid) return BadRequest(ModelState);

    command.FooId = Guid.NewGuid();
    novel.AddFoo(command);
    await _store.SaveAsync(novel);

    return Created(UriFactory.GetFooRoute(novel.Novel.NovelId, command.FooId), command);
}

如何在单元测试中验证FooId确实设置了NewGuid?

c# unit-testing
2个回答
2
投票

使用Typemock Isolator,您可以验证内部属性是否设置如下:

  [TestMethod, Isolated]
  public void Test1
  {
      var testFoo = Isolate.Fake.Dependencies<AddFoo>();
      var newGuid = new Guid();
      testFoo.FooId = Guid.NewGuid()
      Isolate.Verify.NonPublic.Property.WasCalledSet(testFoo, "FooId").WithArgument(newGuid);
  }

或者你可以提取属性并断言它是一个Guid:

  [TestMethod, Isolated]
  public void Test2
  {
      var testFoo = Isolate.Fake.Dependencies<AddFoo>();
      var fooID = Isolate.Invoke.Method(testFoo , "getFooID");
      Assert.IsTrue(fooID is Guid);
  }

2
投票

需要分离关注点。

我不知道你在这里想做什么。但对我来说这看起来像

检索并加载一些数据

var novel = await RetrieveNovel(novelid);
if (novel == null) return NotFound();
if (!ModelState.IsValid) return BadRequest(ModelState);

一些业务逻辑

command.FooId = Guid.NewGuid();
novel.AddFoo(command);
await _store.SaveAsync(novel);

也许如果你分开你的逻辑,你可以很容易地测试它们。

此外,如果您只是想测试Food Attributes的值是否发生了变化。然后你应该嘲笑其余的。就像加载小说一样,保存它和其他外部依赖,如UriFactory。

© www.soinside.com 2019 - 2024. All rights reserved.