小编gus*_*nis的帖子

Moq.Mock <Expression <Func <T,bool >>>() - 如何使用Moq将表达式设置到模拟中

我已经阅读了很多关于这个主题的其他QA,我仍然无法找到问题的解决方案,所以我决定公开我的案例.

我有这个界面

public interface IRepository<T> where T : class, IEntity 
{
    IQueryable<T> Find(Expression<Func<T, bool>> predicate);
    T FindIncluding(int id, params Expression<Func<T, object>>[] includeProperties);
}
Run Code Online (Sandbox Code Playgroud)

这是包含我想要设置的Mock的方法的基本结构

public PeopleController CreatePeopleController()
{
    var mockUnitofWork = new Mock<IUnitOfWork>();
    var mockPeopleRepository = new Mock<IRepository<Person>>();

    mockPeopleRepository.Setup(r=>r.Find().Returns(new Person(){});
    mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
    return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)

我一直试图用这种方式设置模拟:

public PeopleController CreatePeopleController()
{
    var mockUnitofWork = new Mock<IUnitOfWork>();
    var mockPeopleRepository = new Mock<IRepository<Person>>();

    mockPeopleRepository.Setup(r=>r.Find(It.isAny<Expression<Func<Person,bool>>>()).Single()).Returns(new Person(){});
    mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
    return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)

但系统总是抛出相同的异常"System.NotSupportedException:Expression引用一个不属于模拟对象的方法......"

另外我想补充说我正在使用MSTest和Moq

我知道使用Expression设置模拟并不容易,不推荐,但这对我来说非常重要因为"查找"是我在我的应用程序中大量使用的方法

.net tdd unit-testing moq mocking

15
推荐指数
2
解决办法
8829
查看次数

如何使用LuceneNet中的indexWriter删除文档

我有这个方法,我在我的控制器中调用,必须删除一个特定的文档.我在一些文章中读到删除文档的最佳方法是使用IndexWriter.但我不能让它发挥作用.这是我的代码

我的索引:

    var article1 = new Document();
               article1.Add(new Field("Id", "1", Field.Store.YES, Field.Index.ANALYZED));
               article1.Add(new Field("Author", "Author", Field.Store.YES, Field.Index.ANALYZED));
               article1.Add(new Field("Title", "Title", Field.Store.YES, Field.Index.ANALYZED));

  var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
           var analyzar = new StandardAnalyzer(Version.LUCENE_29);

           var writer = new IndexWriter(directory, analyzar, true,  IndexWriter.MaxFieldLength.LIMITED);

           writer.AddDocument(article1);
           writer.Optimize();
           writer.Commit();
           writer.Close();
Run Code Online (Sandbox Code Playgroud)

方法删除:

public void Delete(string id)
{
    var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
    var analyzar = new StandardAnalyzer(Version.LUCENE_29);
    var writer = new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
    var term = new Term("Id", id);
    writer.DeleteDocuments(term);
    writer.Optimize();
    writer.Commit();
    writer.Close();
}
Run Code Online (Sandbox Code Playgroud)

控制器中调用"删除"void的方法: …

lucene.net full-text-search

4
推荐指数
2
解决办法
2204
查看次数

标签 统计

.net ×1

full-text-search ×1

lucene.net ×1

mocking ×1

moq ×1

tdd ×1

unit-testing ×1