function basicCommandTest(mInfo, mCommandProperties, mExpectedSpecificData) {
		const sMsg = mInfo.moduleName || `Test for '${mInfo.commandName}' command`;
		QUnit.module(sMsg, {
			beforeEach() {
				this.mCurrentInfo = { ...mInfo };
				this.mCurrentCommandProperties = { ...mCommandProperties };
				this.mCurrentExpectedSpecificData = { ...mExpectedSpecificData };
				this.oMockedAppComponent = RtaQunitUtils.createAndStubAppComponent(sandbox);
				const oVariantModel = new JSONModel();
				oVariantModel.getCurrentVariantReference = function(sVariantManagementReference) {
					return sVariantManagementReference;
				};
				this.oMockedAppComponent.setModel(oVariantModel, ControlVariantApplyAPI.getVariantModelName());
				sandbox.stub(ChangesWriteAPI, "getChangeHandler").resolves();
				this.oCreateStub = sandbox.stub(ChangesWriteAPI, "create").resolves();
				this.oControl = new Control("myFancyControlId");
			},
			afterEach() {
				sandbox.restore();
				this.oControl.destroy();
				this.oMockedAppComponent.destroy();
			}
		}, function() {
			if (mInfo.designtimeAction) {
				QUnit.test("when creating the Command via the CommandFactory", function(assert) {
					return actualTest.call(this, assert, false, false, false);
				});

				if (!mInfo.variantIndependent) {
					QUnit.test("when creating the Command via the CommandFactory with jsOnly=true and a VariantManagement", function(assert) {
						return actualTest.call(this, assert, true, false, true);
					});

					QUnit.test("when creating the Command via the CommandFactory with variantIndependent=true and a VariantManagement", function(assert) {
						return actualTest.call(this, assert, false, true, true);
					});

					QUnit.test("when creating the Command via the CommandFactory with variantIndependent=true and no VariantManagement", function(assert) {
						return actualTest.call(this, assert, false, true, false);
					});

					QUnit.test("when creating the Command via the CommandFactory with jsOnly=true and variantIndependent=true and a VariantManagement", function(assert) {
						return actualTest.call(this, assert, true, true, true);
					});
				}
			} else {
				QUnit.test("when creating the Command via the CommandFactory", function(assert) {
					return actualTest.call(this, assert, false, false, false);
				});

				if (!mInfo.variantIndependent) {
					QUnit.test("when creating the Command via the CommandFactory and a VariantManagement", function(assert) {
						return actualTest.call(this, assert, false, false, true);
					});
				}
			}
		});
	}
Executes a test for a command. The test mocks the needed designtime metadata and calls the <code>sap.ui.rta.command.CommandFactory</code> to create the Command.
Also tests if the change specific data are correctly passed to the ChangesWriteAPI.create function.

@param {object} mInfo - Information about the command and the test
@param {string} mInfo.commandName - Name of the command defined in the <code>sap.ui.rta.command.CommandFactory</code>
@param {string} [mInfo.moduleName] - Name for the QUnit module
@param {any} [mInfo.additionalDesigntimeAttributes] - Additional functions or properties that end up in the designtime mock
@param {string|string[]} mInfo.designtimeActionStructure - Name of the action in the designtime file - nested structures should be put into an array
@param {boolean} [mInfo.variantIndependent] - Whether the command is variant independent (e.g. annotation)
@param {object} mCommandProperties - Properties with which the command will be created
@param {object} mExpectedSpecificData - Command specific data that will be passed to the creation of the <code>sap.ui.fl.apply._internal.flexObjects.UIChange</code>