@Override
    public Optional<String> getValue(Object arg, String type) {
        String methodName = getMethodNameByFieldName(getKey(type));
        return Optional.ofNullable(ReflectUtils.invokeWithNoneParameterAndReturnString(arg, methodName));
    }
@Test
    public void testValue() {
        TypeStrategy strategy = new ObjectTypeStrategy();
        Entity entity = new Entity();
        entity.setTest("bar");

        // Normal
        Assert.assertEquals("bar", strategy.getValue(entity, ".test").orElse(null));

        // Test null
        Assert.assertNotEquals("bar", strategy.getValue(new Entity(), ".test").orElse(null));

        // The test couldn't find methods
        Assert.assertNull(strategy.getValue(new Entity(), ".foo").orElse(null));

        Assert.assertNull(strategy.getValue(new Entity(), ".Foo").orElse(null));

        Assert.assertNull(strategy.getValue(new Entity(), ".$oo").orElse(null));

        // The test is not equal
        entity.setTest("foo");
        Assert.assertNotEquals("bar", strategy.getValue(entity, ".test").orElse(null));
    }