我第一次开始单元测试。我正在关注resoCoder的教程
这是我的测试代码,我在其中模拟我的 dbManager 类,但我无法模拟 DAO,因为它们是在 moor 中自动生成的,并且没有针对它们的 setter 方法。
class MockDbManager extends Mock implements DbManager{}
void main() {
RecipeLocalDataSource dataSource;
MockDbManager _dbManager;
setUp(() {
_dbManager = MockDbManager();
dataSource = RecipeLocalDataSource(_dbManager);
});
group('Search Food Table', (){
List<FoodTableData> getFoodTable(){
var list = [];
for(var i =1; i <=5 ; i++){
list.add(FoodTableData(id: i, name: 'item $i'));
}
return list;
}
var searchQuery = 'query';
test('Should return foodTableData when query is successful', (){
//arrange
when(_dbManager.foodTableDao.searchFoods(searchQuery)).thenAnswer((realInvocation) async => getFoodTable());
//act
var result = dataSource.searchFoodTable('test');
//assert
verify(_dbManager.foodTableDao.searchFoods(searchQuery));
expect(getFoodTable(), result);
});
});
}
我收到以下错误
NoSuchMethodError: The method 'searchFoods' was called on null.
Receiver: null
Tried calling: searchFoods("query")
我理解错误,但不知道如何解决。
另外,我也遇到了与preferenceManager 类类似的问题,其中我有一个用于UserPrefs 的getter。
UserPrefs get user => UserPrefs(_pref);
当我访问_prefManager.user.name
测试时,它会引发相同的错误。我该如何解决呢?