最小起订量设置对象的属性
MOQ setting properties on a object
我不得不使用一个 class,它具有未知的依赖关系,可能还有其他代码味道。
我无法对此 class 进行更改,并且它已用于我不想触及的大量其他项目。
我已经创建了一个工厂来创建这个对象并设置属性。
我想要对这个工厂进行单元测试,并且由于这个对象的依赖关系未知,我正在使用最小起订量创建一个模拟。
我遇到了问题,我无法在 MOQ 对象上设置属性。我希望它由工厂设置,而不是使用
mock.Setup(x => x.FirstName).Returns(firstName);
这是我的演示代码和测试
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName)
{
//arrange
var mock = new Mock<IPerson>();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
Assert.AreEqual(firstName, actual.FirstName);
}
工厂长这样
public static class PersonFactory
{
public static IPerson Create(IPerson person, string firstName)
{
person.FirstName = firstName;
return person;
}
}
我已经用 NSubsitute 试过了,效果不错。
我怀疑它在某处需要一个 .object。
允许 mock 记录 callin 分配给属性的值
mock.SetupAllProperties(); //Stub all properties on a mock (not available on Silverlight):
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName) {
//arrange
var mock = new Mock<IPerson>();
mock.SetupAllProperties();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
Assert.AreEqual(firstName, actual.FirstName);
}
您也可以直接验证 属性 集
mock.VerifySet(foo => foo.FirstName = firstName);
例如
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName) {
//arrange
var mock = new Mock<IPerson>();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
mock.VerifySet(_ => _.FirstName = firstName);
}
我不得不使用一个 class,它具有未知的依赖关系,可能还有其他代码味道。
我无法对此 class 进行更改,并且它已用于我不想触及的大量其他项目。
我已经创建了一个工厂来创建这个对象并设置属性。
我想要对这个工厂进行单元测试,并且由于这个对象的依赖关系未知,我正在使用最小起订量创建一个模拟。
我遇到了问题,我无法在 MOQ 对象上设置属性。我希望它由工厂设置,而不是使用
mock.Setup(x => x.FirstName).Returns(firstName);
这是我的演示代码和测试
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName)
{
//arrange
var mock = new Mock<IPerson>();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
Assert.AreEqual(firstName, actual.FirstName);
}
工厂长这样
public static class PersonFactory
{
public static IPerson Create(IPerson person, string firstName)
{
person.FirstName = firstName;
return person;
}
}
我已经用 NSubsitute 试过了,效果不错。 我怀疑它在某处需要一个 .object。
允许 mock 记录 callin 分配给属性的值
mock.SetupAllProperties(); //Stub all properties on a mock (not available on Silverlight):
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName) {
//arrange
var mock = new Mock<IPerson>();
mock.SetupAllProperties();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
Assert.AreEqual(firstName, actual.FirstName);
}
您也可以直接验证 属性 集
mock.VerifySet(foo => foo.FirstName = firstName);
例如
[TestCase("John")]
[TestCase("Paul")]
[TestCase("George")]
[TestCase("Ringo")]
public void Create(string firstName) {
//arrange
var mock = new Mock<IPerson>();
//act
var actual = PersonFactory.Create(mock.Object, firstName);
//assert
mock.VerifySet(_ => _.FirstName = firstName);
}