DefaultViewComputationCache implements ViewComputationCache,
    Iterable<Pair<ValueSpecification, FudgeMsg>> { @Override public Object getValue(final ValueSpecification specification) { ArgumentChecker.notNull(specification, "Specification"); final long identifier = getIdentifierMap().getIdentifier(specification); FudgeMsg data = getPrivateDataStore().get(identifier); if (data == null) { data = getSharedDataStore().get(identifier); } if (data == null) { final MissingValueLoader loader = getMissingValueLoader(); if (loader == null) { return null; } data = loader.findMissingValue(identifier); if (data == null) { return null; } } final FudgeDeserializer deserializer = new FudgeDeserializer(getFudgeContext()); final Object obj = deserializeValue(deserializer, data); cacheValueSize(specification, data, obj); return obj; } protected  DefaultViewComputationCache(final IdentifierMap identifierMap, final FudgeMessageStore dataStore,
      final FudgeContext fudgeContext);  DefaultViewComputationCache(final IdentifierMap identifierMap, final FudgeMessageStore privateDataStore,
      final FudgeMessageStore sharedDataStore, final FudgeContext fudgeContext); void setMissingValueLoader(final MissingValueLoader missingValueLoader); MissingValueLoader getMissingValueLoader(); IdentifierMap getIdentifierMap(); FudgeMessageStore getPrivateDataStore(); FudgeMessageStore getSharedDataStore(); FudgeContext getFudgeContext(); @Override Object getValue(final ValueSpecification specification); @Override Object getValue(final ValueSpecification specification, final CacheSelectHint filter); @Override Collection<Pair<ValueSpecification, Object>> getValues(final Collection<ValueSpecification> specifications); @Override Collection<Pair<ValueSpecification, Object>> getValues(final Collection<ValueSpecification> specifications, final CacheSelectHint filter); @Override void putPrivateValue(final ComputedValue value); @Override void putSharedValue(final ComputedValue value); @Override void putValue(final ComputedValue value, final CacheSelectHint filter); @Override void putPrivateValues(final Collection<? extends ComputedValue> values); @Override void putSharedValues(final Collection<? extends ComputedValue> values); @Override void putValues(final Collection<? extends ComputedValue> values, final CacheSelectHint filter); @Override Integer estimateValueSize(final ComputedValue value); @Override Iterator<Pair<ValueSpecification, FudgeMsg>> iterator(); void delete();  }
@Test public void testMissingValueSpec() { final ValueSpecification valueSpec = new ValueSpecification("missing", ComputationTargetSpecification.NULL, ValueProperties.with(ValuePropertyNames.FUNCTION, "mockFunctionId").get()); assertNull(_viewComputationCache.getValue(valueSpec)); }