所以我在这里有两个实体(有很多关系):
public class Tag
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Video> Videos { get; set; }
}
public class Video
{
[Key]
public int ID { get; set; }
public string EmbedSource { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
有两个存储库:
public interface ITagsRepository
{
IQueryable<Tag> GetTags { get; }
}
public interface IVideosRepository
{
IQueryable<Video> GetVideos { get; }
}
现在我正试图在我的ninject控制器中模拟它们,不幸的是作为初学者我遇到了问题,因为我的每个实体都需要另一个,我不能嘲笑它们,具有讽刺意味的是,我似乎陷入了困境无限循环:
private void AddBindings()
{
Mock<IVideosRepository> mock = new Mock<IVideosRepository>();
mock.Setup(m => m.GetVideos).Returns(new List<Video>
{
new Video {EmbedSource = "embedcode", ID = 1, Tags = new Tag {ID = 0, Name = "testtestest", Video = new Video ... etc etc}
})
}
我正在寻找一种更快/更清洁的方法来实现这一目标。
答案 0 :(得分:1)
您可以在设置模拟之前创建实体:
var video1 = new Video {EmbedSource = "embedcode", ID = 1};
var video2 ...
var tag1 = new Tag {ID = 0, Name = "testtestest"};
var tag2 ...
video1.Tags = new List<Tag> { tag1, tag2 };
tag1.Videos = new List<Video> { video1, video2};
Mock<IVideosRepository> mock = new Mock<IVideosRepository>();
mock.Setup(m => m.GetVideos).Returns(new List<Video>
{
video1, video2
})