@Test
	public void testGameObjectController() {
		Unit frog = GameLogic.INSTANCE.createUnit(UnitType.FROG);
		Unit moscito = GameLogic.INSTANCE.createUnit(UnitType.MOSCITO);
		Hero druid = (Hero) GameLogic.INSTANCE.createUnit(UnitType.DRUID);
		Item staff = GameLogic.INSTANCE.createItem(ItemType.STAFF);
		Item rootwand = GameLogic.INSTANCE.createItem(ItemType.ROOTWAND);
		Item cap = GameLogic.INSTANCE.createItem(ItemType.CAP);
		Ability firebolt = GameLogic.INSTANCE.createAbility(AbilityType.FIREBOLT);
		Ability fireball = GameLogic.INSTANCE.createAbility(AbilityType.FIREBALL);
		Buff burn = GameLogic.INSTANCE.createBuff(BuffType.BURN);

		// check successful creation of gameobjects
		assertTrue("Check if frog of type unit was created", frog != null && frog instanceof Unit);
		assertTrue("Check if moscito of type unit was created", moscito != null && moscito instanceof Unit);
		assertTrue("Check if druid of type hero was created", druid != null && druid instanceof Hero);
		assertTrue("Check if staff of type item was created", staff != null && staff instanceof Item);
		assertTrue("Check if rootwand of type item was created", rootwand != null && rootwand instanceof Item);
		assertTrue("Check if cap of type item was created", cap != null && cap instanceof Item);
		assertTrue("Check if firebolt of type ability was created", firebolt != null && firebolt instanceof Ability);
		assertTrue("Check if fireball of type ability was created", fireball != null && fireball instanceof Ability);

		// check if values are correctly initialized (taken from units.ini file)
		assertTrue("Check if frog has level 2 and 3 lifepoints", frog.getLevel() == 2 && frog.getLifeMaximum() == 5 && frog.getLifeCurrent() == 5);
		assertTrue("Check if moscito has level 1 and 3 lifepoints", moscito.getLevel() == 1 && moscito.getLifeMaximum() == 3 && moscito.getLifeCurrent() == 3);
		assertTrue("Check if druid has level 1 and 30 lifepoints", druid.getLevel() == 1 && druid.getLifeMaximum() == 30 && druid.getLifeCurrent() == 30);
		assertTrue("Check if moscito has nature damage 2, nature resistance 2 and physical resistance 1", moscito.getDamage().get(ElementType.NATURE) == 2 && moscito.getResistance().get(ElementType.NATURE) == 2 && moscito.getResistance().get(ElementType.PHYSICAL) == 1);

		// check if values are correctly initialized (taken from items.ini file)
		assertTrue("Check if staff has level 1, goldValue 5 and is of type WAND", staff.getLevel() == 1 && staff.getGoldValue() == 5 && staff.getCategory().equals(ItemCategory.WAND));
		assertTrue("Check if rootwand has level 1, goldValue 7 and is of type WAND", rootwand.getLevel() == 1 && rootwand.getGoldValue() == 7 && rootwand.getCategory().equals(ItemCategory.WAND));
		assertTrue("Check if cap has level 1, goldValue 3 and is of type CAP", cap.getLevel() == 1 && cap.getGoldValue() == 3 && cap.getCategory().equals(ItemCategory.CAP));

		// check if values are correctly initialized (taken from abilities.ini file)
		assertTrue("Check if firebolt has level 1, is not passive, has target type SINGLE_TARGET and is of type FIREBOLT", firebolt.getLevel() == 1 && !firebolt.isPassive() && firebolt.getTargetType().equals(TargetCategory.SINGLE_TARGET) && firebolt instanceof Firebolt);
		assertTrue("Check if fireball has level 13, is not passive, has target type POINT_TARGET and is of type FIREBALL", fireball.getLevel() == 13 && !fireball.isPassive() && fireball.getTargetType().equals(TargetCategory.POINT_TARGET) && fireball instanceof Fireball);

		// check if values are correctly initialized (taken from buffs.uni file)
		assertTrue("Check if burn has level 1 and duration is 5", burn.getLevel() == 1 && burn.getDurationMaximum() == 5);

		// check addItem functionality (staff and cap should be equipped; rootwand should be in inventory)
		UnitUtil.addItem(druid, staff);
		UnitUtil.addItem(druid, rootwand);
		UnitUtil.addItem(druid, cap);
		assertTrue("Check if staff is equipped by druid", staff.getOwner().equals(druid) && UnitUtil.isItemEquipped(druid, staff) && druid.getEquipment().contains(staff));
		assertTrue("Check if cap is equipped by druid", cap.getOwner().equals(druid) && UnitUtil.isItemEquipped(druid, cap) && druid.getEquipment().contains(cap));
		assertTrue("Check if rootwand is in inventory of druid", rootwand.getOwner().equals(druid) && !UnitUtil.isItemEquipped(druid, rootwand) && druid.getInventory().contains(rootwand));

		// change staff and rootwand
		UnitUtil.unequipItem(druid, staff);
		UnitUtil.equipItem(druid, rootwand);
		assertTrue("Check if rootwand is equipped and staff is in inventory", UnitUtil.isItemEquipped(druid, rootwand) && !UnitUtil.isItemEquipped(druid, staff) && druid.getEquipment().contains(rootwand) && druid.getInventory().contains(staff));

		// check addAbility functionality
		UnitUtil.addAbility(druid, firebolt);
		UnitUtil.addAbility(druid, fireball);
		assertTrue("Check if firebolt and fireball are added to druid", druid.getAbilities().contains(firebolt) && druid.getAbilities().contains(fireball) && firebolt.getOwner().equals(druid) && fireball.getOwner().equals(druid));

		// check addBuff functionality
		UnitUtil.addBuff(druid, frog, burn);
		assertTrue("Check if burn is added to frog", frog.getBuffs().contains(burn) && burn.getOwner().equals(druid) && burn.getTarget().equals(frog));

		// check remove functionality
		GameLogic.INSTANCE.removeUnit(druid);
		GameLogic.INSTANCE.removeUnit(frog);
		GameLogic.INSTANCE.removeUnit(moscito);
		assertTrue("Check if druid does not have any ability and any items left", druid.getAbilities().size() == 0 && druid.getEquipment().size() == 0 && druid.getInventory().size() == 0 && druid.getPouch().size() == 0);
		assertTrue("Check if owner of abilities is correctly removed", firebolt.getOwner() == null && fireball.getOwner() == null);
		assertTrue("Check if owner and target of buffs is correctly removed", burn.getOwner() == null && burn.getTarget() == null);
		assertTrue("Check if owner of items is correctly removed", staff.getOwner() == null && rootwand.getOwner() == null && cap.getOwner() == null);

		//TODO add test with itemabilities
	}