Dar*_*eth 1 c# unit-testing dependency-injection moq mocking
我的类/接口设置如下:
房间.cs
//import statements
namespace namespace1
{
internal class Room: Apartment
{
// constructor
public Room(Furniture furniture) : base(furniture)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
公寓.cs
// import statements
namespace namespace2
{
public abstract class Apartment: Building
{
private int numChairs = 0;
// constructor
protected Apartment(IFurniture furniture) : base(IFurniture furniture)
{
this.numChairs = furniture.chairs.Length;
}
}
}
Run Code Online (Sandbox Code Playgroud)
建筑.cs
// import statements
namespace namespace3
{
public abstract class Building
{
// constructor
protected Building(IFurniture furniture)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 Room 对象,其中包含一个模拟的 Furniture 对象。这是我所做的:
[Test]
public void fun()
{
var mockedFurniture = new Mock<IFurniture>();
var room = new Room(mockedFurniture.Object);
}
Run Code Online (Sandbox Code Playgroud)
问题:因为 的 构造函数Room调用base(furniture), 的 构造函数Apartment正在尝试访问furniture.chairs,即null。我怎么能嘲笑这个呢?
编辑
问题在于Apartment.cs。它尝试访问 Furniture.chairs,即null. 这是 IFurniture.cs:
public interface IFurniture
{
IChairs Chairs { get; }
}
Run Code Online (Sandbox Code Playgroud)
根据你的例子,你IChairs也需要模拟。
var mockedChairs = new Mock<IChairs>();
var mockedFurniture = new Mock<IFurniture>();
mockedFurniture.Setup(q=>q.Chairs).Returns(mockedChairs.Object);
var room = new Room(mockedFurniture.Object);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |