private static CatCage getCatCage_GoldStandard(final String identifier, final Cat topCat, final Cat rightCat, final Cat bottomCat, final Cat leftCat)
	{
		return new CatCage()
		{
			@Override
			public String getIdentifier()
			{
				return identifier;
			}

			@Override
			public Cat getTopCell()
			{
				return topCat;
			}

			@Override
			public Cat getLeftCell()
			{
				return leftCat;
			}

			@Override
			public Cat getRightCell()
			{
				return rightCat;
			}

			@Override
			public Cat getBottomCell()
			{
				return bottomCat;
			}

			@Override
			public int hashCode()
			{
				return 0;
			}

			private boolean areCellContentsEqual(Cat cat1, Cat cat2)
			{
				return (cat1 == null ? cat2 == null : cat1.equals(cat2));
			}

			@Override
			public boolean equals(Object obj)
			{
				boolean areEqual = false;
				if (obj != null && CatCage.class.isAssignableFrom(obj.getClass()))
				{
					CatCage catCageOther = (CatCage) obj;
					areEqual = (catCageOther.getIdentifier().equals(getIdentifier())) && areCellContentsEqual(getBottomCell(), catCageOther.getBottomCell()) && areCellContentsEqual(getLeftCell(), catCageOther.getLeftCell()) && areCellContentsEqual(getTopCell(), catCageOther.getTopCell()) && areCellContentsEqual(getRightCell(), catCageOther.getRightCell());
				}
				assert !areEqual || (hashCode() == obj.hashCode()) : "If two instances are equal then their hashcodes must match! hashCode() = " + hashCode() + " obj.hashCode() = " + obj.hashCode();
				return areEqual;
			}
		};
	}