Stack Exchange
Mock framework with Objectify?
Is it possible to use some mocking framework with Objectify?
I've tried the following, but it doesn't work:
Foo mockFoo = mock(Foo.class);      
ObjectifyService.register(mockFoo.getClass());
ObjectifyUtil.get().put(mockFoo);

The error is:
java.lang.IllegalArgumentException: CGLIB$CALLBACK_0: org.mockito.internal.creation.MethodInterceptorFilter is not a supported property type.
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184)
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:157)
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:123)
    at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:320)
    at com.googlecode.objectify.impl.save.FieldSaver.setEntityProperty(FieldSaver.java:171)
    at com.googlecode.objectify.impl.save.LeafFieldSaver.saveValue(LeafFieldSaver.java:93)
    at com.googlecode.objectify.impl.save.FieldSaver.save(FieldSaver.java:156)
    at com.googlecode.objectify.impl.save.ClassSaver.save(ClassSaver.java:84)
    at com.googlecode.objectify.impl.Transmog.save(Transmog.java:342)
    at com.googlecode.objectify.impl.ConcreteEntityMetadata.toEntity(ConcreteEntityMetadata.java:231)
    at com.googlecode.objectify.impl.AsyncObjectifyImpl.put(AsyncObjectifyImpl.java:252)
    at com.googlecode.objectify.impl.AsyncObjectifyImpl.put(AsyncObjectifyImpl.java:229)
    at com.googlecode.objectify.impl.ObjectifyImpl.put(ObjectifyImpl.java:126)
    at org.foo.test.ApiTest.bar(ApiTest.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Am I doing something wrong, or is this just not possible?

What are you trying to mock? Objectify or the entities you are persisting? Don't think the second case is possible nor makes a whole lot of sense..

In my opinion, mocking a framework as big as Objectify cannot rely upon Mockito.
public class ProductTest {
  @Rule
  public EmbeddedDataStore store = new EmbeddedDataStore();

  @Before
  public void register() {
    ObjectifyService.register(Product.class);
  }

  @Test
  public void accessObjectifyWithSuccess() {
    Objectify ofy = ObjectifyService.begin();
    ofy.put(new Product());
    assertEquals(1, ofy.query(Product.class).list().size());
  }
}

The @Rule loads the datastore before the test. Then, the Product class is registered and the integration tests are run.
So, with this technique, you can run tests on App Engine/Objectify without deploying an app.
The following code is one way to code the datastore rule:
import org.junit.rules.ExternalResource;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;

public class EmbeddedDataStore extends ExternalResource {
  private static LocalServiceTestHelper helper;

  @Override
  protected void before() throws Throwable {
    helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig(),
      new LocalBlobstoreServiceTestConfig(), new LocalTaskQueueTestConfig(),
      new LocalMemcacheServiceTestConfig());
  }

  @Override
  protected void after() {
    helper.tearDown();
  }
}


GRAVE: Received exception tearing down config of type com.google.appengine.tools.development.testing.LocalBlobstoreServiceTestConfig
java.lang.NullPointerException

You missed helper.setUp();
