即使测试通过而且不确定原因,我总是会收到错误。这次我检查如果视图为空则有一个空指针。
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource());
List<ReportParameter> rptParams = new List<ReportParameter>();
ReportParameter param = new ReportParameter("paramSuchwort");
param.Values.AddRange(sw.ToArray());
rptParams.Add(param);
this.reportViewer1.LocalReport.SetParameters(rptParams)
这是堆栈跟踪:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockView = mock(CollectionContract.View.class);
// Get a reference to the class under test
presenter = new CollectionPresenter(repository, mockView);
}
@Test(expected = NullPointerException.class)
public void testShowingUIWhenViewIsNull() {
presenter = new CollectionPresenter(repository, null);
verify(mockView).showAddCollection();
}
如果视图存在,为什么在show view ui上会出现sql异常?坚持这一点,因为我几乎在每次测试中都能找到它。任何想法都会很棒。谢谢。
答案 0 :(得分:1)
从这条线来判断:
Caused by: com.almworks.sqlite4java.SQLiteException: [-92] DB[1] is not confined or already disposed
前一行
at com.almworks.sqlite4java.SQLiteConnection.checkThread(SQLiteConnection.java:1386)
可以得出结论,checkThread
做的是它检查,是否正在最初创建数据库的线程上执行查询,并且该检查未通过。
确保您在同一个线程上创建和查询数据库。基本上,您必须为数据库操作专用一个单独的线程。
这里是sources的checkThread()
方法:
void checkThread() throws SQLiteException {
Thread confinement = myConfinement;
if (confinement == null) {
throw new SQLiteException(WRAPPER_MISUSE, this + " is not confined or already disposed");
}
...
}
而myConfinement
是null
- dispose()
方法。因此,还要确保您没有dispose()
- 来自连接。