我对 couchbase 查询计划的工作方式理解有问题。我将 SpringData 与 Couchbase 4.1 结合使用,并提供 Couchbase 存储库的自定义实现。在我的 Couchbase 存储库的自定义实现中,我有以下方法:
String queryAsString = "SELECT MyDatabase.*, META().id as _ID, META().cas as _CAS FROM MyDatabase WHERE segmentId = $id AND _class = $class ORDER BY executionTime DESC LIMIT 1";
JsonObject params = JsonObject.create()
.put(CLASS_VARIABLE, MyClass.class.getCanonicalName())
.put(ID_VARIABLE, segmentId);
N1qlQuery query = N1qlQuery.parameterized(queryAsString, params);
List<MyClass> resultList = couchbaseTemplate.findByN1QL(query, SegmentMembers.class);
return resultList.isEmpty() ? null : resultList.get(0);
Run Code Online (Sandbox Code Playgroud)
结果,Spring Data 生成以下 json 对象,表示对 Couchbase 的查询:
{
"$class":"path/MyClass",
"statement":"SELECT MyDatabase.*, META().id as _ID, META().cas as _CAS …Run Code Online (Sandbox Code Playgroud) java couchbase spring-data spring-data-couchbase couchbase-java-api
我有PowerMock和Mockito兼容性的问题.
我有测试班:
@ActiveProfiles("test")
@PrepareForTest(LanguageUtils.class)
public class MyControllerTest {
@Mock
private MyMockClass MyMockClass;
@Autowired
private MyController myController;
@Rule
public PowerMockRule rule = new PowerMockRule();
}
Run Code Online (Sandbox Code Playgroud)
我的POM看起来像:
<junit-version>4.12</junit-version>
<hamcrest-version>1.3</hamcrest-version>
<mockito-version>1.10.19</mockito-version>
<powermock-version>1.6.4</powermock-version>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>${hamcrest-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito-version}</version>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>${powermock-version}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我尝试运行测试时,我得到了ClassNotFoundException.错误导致PowerMockRule,因为当我删除此行时错误消失.
完整的堆栈跟踪看起来像:
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.powermock.classloading.DeepCloner
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:68)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:34)
at org.powermock.classloading.ClassloaderExecutor.createDeepCloner(ClassloaderExecutor.java:106)
at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:88)
at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:78) …Run Code Online (Sandbox Code Playgroud)