我试图测试一个服务方法,但为了做到这一点,我必须模拟我的ReportRepository。除了对Include方法的调用使模拟返回为NULL外,其他操作都很好。
下面返回预期的报告:
var report = new Report();
var reportRepoMock = Substitute.For<IReportRepository>();
reportRepoMock.Query()
.ByReportType(ReportType.DELQ)
.ToEntityAsync()
.Returns(Task.FromResult(report));
但该服务实际上执行以下操作:
var report = await reportRepo.Query()
.ByReportType(ReportType.DELQ)
.Include(m => m.Fields)
.ToEntityAsync();
问题是,当我在模拟中包含'include'方法时,返回的是null而不是预期的报告,因此我的测试以NullReferenceException
:
var reportRepoMock = Substitue.For<IReportRepository>();
reportRepoMock.Query()
.ByReportType(ReportType.DELQ)
.Include(m => m.Fields)
.ToEntityAsync()
.Returns(Task.FromResult(report));
public class ReportRepository : IReportRepository
{
private readonly IDbSet _dbSet;
public ReportRepository(IDbContext context) {
_dbSet = context.Set<Report>();
}
void Add(Report report) { ... }
void Remove(Report report) { ... }
...
public IReportQueryBuilder Query() {
return new ReportQueryBuilder(_dbSet.AsQueryable());
}
}
public class ReportQueryBuilder : IReportQueryBuilder
{
private IQueryable<Report> _query;
public ReportQueryBuilder(IQueryable<Report> query) {
_query = query;
}
public IReportQueryBuilder ByReportType(ReportType reportType) {
_query = _query.Where(m => m.ReportType == reportType);
return this;
}
public IReportQueryBuilder Include<T>(Expression<Func<Report, T>> property) {
_query = _query.Include(property);
return this;
}
public async Task<Report> ToEntityAsync() {
return await _query.FirstOrDefaultAsync();
}
}
想通了这个。而不是将模拟设置为:
reportRepoMock.Query()
.ByReportType(ReportType.DELQ)
.Include(m => m.Fields)
.ToEntityAsync()
.Returns(Task.FromResult(report));
我去了:
reportRepoMock.Query()
.ByReportType(ReportType.DELQ)
.Include(Arg.Any<Expression<Func<Report, Collection<ReportField>>>>())
.ToEntityAsync()
.Returns(Task.FromResult(report));
在我的Spring Boot应用程序(基于JHipster 4)中,我试图使用属性表达式根据Spring文档中描述的相关实体的属性来过滤我的查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-方法。查询属性表达式 我想得到所有的约会,在他们的约会计划中有一个特定的雇员帐户
我试图获取一个列表从数据库和findAll()返回空列表。我有多个jpa存储库,但只有一个不工作。这是代码: 这就是实体: 当我调用product类别epository.findAll()时,它返回空列表,因此我在数据库中有许多条目。谢谢你的帮助!
我正在编写一个lambda表达式来将给定的纬度和经度转换为地址。表达式应该以坐标为参数,并返回其相应的地址。但是,返回的值为null。以下是我的班级: 以下是logcat的输出: 以下是我的用法: 是类的对象,以下是相关接口: 当我尝试从相关适配器打印坐标时,它们会正确打印。因此,位置正在正确设置,但是当我试图从另一个类访问它时,它会显示字符串的空值。你能建议一个替代方法来从表达式中提取位置吗?
这是我要测试的类 这是测试类 当我做这个测试的时候 我创建这些类时参考了其他已有的代码,来自不同的地方,并且没有真正理解如何进行注释(部分原因是时间不够),所以如果有人能告诉我,不仅是如何修复,而且还有为什么我错了,我会非常感激的! 编辑: 我做了@Nikolas Charalambidis建议的更改(谢谢!),所以我的类现在看起来与 通过稍加搜索,从这个SO答案中,我觉得我不应该@autowir
此示例存储库有一个方法 现在不需要使用Robolectric来单元测试了吗?
我已经创建了一个包含控制器、服务和存储库层的基本Rest API。我现在正在尝试为通过产品ID查找产品的服务层方法编写一个单元测试。但是,当我运行测试时,它会在我试图模拟存储库findById()方法的行中抛出一个NullPointerException。 服务层中的getProductById()方法如下所示: 我的服务层测试类: