diff --git a/test/gopls/configuration.test.ts b/test/gopls/configuration.test.ts
index daccdfb..a603127 100644
--- a/test/gopls/configuration.test.ts
+++ b/test/gopls/configuration.test.ts
@@ -4,18 +4,12 @@
  *--------------------------------------------------------*/
 
 import * as assert from 'assert';
-import moment = require('moment');
-import semver = require('semver');
-import sinon = require('sinon');
-import * as vscode from 'vscode';
+import { getGoplsConfig } from '../../src/config';
 import * as lsp from '../../src/goLanguageServer';
-import { getTool, Tool } from '../../src/goTools';
 
 suite('gopls configuration tests', () => {
 	test('filterGoplsDefaultConfigValues', async () => {
-		const defaultGoplsConfig = vscode.workspace.getConfiguration('gopls');
-		const defaultGoplsAnalysesConfig = vscode.workspace.getConfiguration('gopls.analyses');
-
+		const defaultGoplsConfig = getGoplsConfig();
 		interface TestCase {
 			name: string;
 			section: string;
diff --git a/test/integration/codelens.test.ts b/test/integration/codelens.test.ts
index b5a941b..a96b957 100644
--- a/test/integration/codelens.test.ts
+++ b/test/integration/codelens.test.ts
@@ -10,6 +10,7 @@
 import path = require('path');
 import sinon = require('sinon');
 import vscode = require('vscode');
+import { getGoConfig } from '../../src/config';
 import { updateGoVarsFromConfig } from '../../src/goInstallTools';
 import { GoRunTestCodeLensProvider } from '../../src/goRunTestCodelens';
 import { subTestAtCursor } from '../../src/goTest';
@@ -55,7 +56,7 @@
 				return true;
 			},
 		});
-		goConfig = vscode.workspace.getConfiguration('go');
+		goConfig = getGoConfig();
 		const uri = vscode.Uri.file(path.join(fixturePath, 'codelens_test.go'));
 		document = await vscode.workspace.openTextDocument(uri);
 	});
diff --git a/test/integration/config.test.ts b/test/integration/config.test.ts
index a854a3c..e9fa344 100644
--- a/test/integration/config.test.ts
+++ b/test/integration/config.test.ts
@@ -76,7 +76,7 @@
 		// getter
 		Object.defineProperties(this, Object.getOwnPropertyDescriptors(workspaceSettings));
 		this.map = new Map<string, any>(Object.entries(workspaceSettings));
-		this.wrapped = vscode.workspace.getConfiguration('go');
+		this.wrapped = vscode.workspace.getConfiguration('go');  // intentionally using vscode API directly.
 	}
 
 	// tslint:disable: no-any
diff --git a/test/integration/extension.test.ts b/test/integration/extension.test.ts
index 5b75118..c33dca2 100644
--- a/test/integration/extension.test.ts
+++ b/test/integration/extension.test.ts
@@ -192,7 +192,7 @@
 	}
 
 	test('Test Definition Provider using godoc', async () => {
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'godoc' }
 		});
 		await testDefinitionProvider(config);
@@ -204,7 +204,7 @@
 			// gogetdoc is not installed, so skip the test
 			return;
 		}
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'gogetdoc' }
 		});
 		await testDefinitionProvider(config);
@@ -243,7 +243,7 @@
 				['s string']
 			]
 		];
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'godoc' }
 		});
 		await testSignatureHelpProvider(config, testCases);
@@ -286,7 +286,7 @@
 				['s string']
 			]
 		];
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'gogetdoc' }
 		});
 		await testSignatureHelpProvider(config, testCases);
@@ -313,7 +313,7 @@
 				`This is an unexported function so couldn't get this comment on hover :( Not\nanymore!!\n`
 			]
 		];
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'godoc' }
 		});
 		await testHoverProvider(config, testCases);
@@ -358,7 +358,7 @@
 				'IPv4Mask returns the IP mask (in 4-byte form) of the\nIPv4 mask a.b.c.d.\n'
 			]
 		];
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'gogetdoc' }
 		});
 		await testHoverProvider(config, testCases);
@@ -370,7 +370,7 @@
 		sinon.spy(util, 'runTool');
 		sinon.spy(processutil, 'killProcessTree');
 
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'package' },
 			vetFlags: { value: ['-all'] },
 			buildOnSave: { value: 'package' },
@@ -394,7 +394,7 @@
 		// the adjustment is made consistently across multiple open text documents.
 		const file1 = await vscode.workspace.openTextDocument(vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_1.go')));
 		const file2 = await vscode.workspace.openTextDocument(vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_2.go')));
-		const warnings = await goLint(file2.uri, Object.create(vscode.workspace.getConfiguration('go'), {
+		const warnings = await goLint(file2.uri, Object.create(getGoConfig(), {
 			lintTool: { value: 'golint' },
 			lintFlags: { value: [] }
 		}), 'package');
@@ -412,7 +412,7 @@
 	});
 
 	test('Error checking', async () => {
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'package' },
 			vetFlags: { value: ['-all'] },
 			lintOnSave: { value: 'package' },
@@ -575,7 +575,7 @@
 	});
 
 	test('Test Env Variables are passed to Tests', async () => {
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			testEnvVars: { value: { dummyEnvVar: 'dummyEnvValue', dummyNonString: 1 } }
 		});
 		const uri = vscode.Uri.file(path.join(fixturePath, 'baseTest', 'sample_test.go'));
@@ -772,28 +772,28 @@
 
 	test('Workspace Symbols', () => {
 		const workspacePath = path.join(fixturePath, 'vendoring');
-		const configWithoutIgnoringFolders = Object.create(vscode.workspace.getConfiguration('go'), {
+		const configWithoutIgnoringFolders = Object.create(getGoConfig(), {
 			gotoSymbol: {
 				value: {
 					ignoreFolders: []
 				}
 			}
 		});
-		const configWithIgnoringFolders = Object.create(vscode.workspace.getConfiguration('go'), {
+		const configWithIgnoringFolders = Object.create(getGoConfig(), {
 			gotoSymbol: {
 				value: {
 					ignoreFolders: ['vendor']
 				}
 			}
 		});
-		const configWithIncludeGoroot = Object.create(vscode.workspace.getConfiguration('go'), {
+		const configWithIncludeGoroot = Object.create(getGoConfig(), {
 			gotoSymbol: {
 				value: {
 					includeGoroot: true
 				}
 			}
 		});
-		const configWithoutIncludeGoroot = Object.create(vscode.workspace.getConfiguration('go'), {
+		const configWithoutIncludeGoroot = Object.create(getGoConfig(), {
 			gotoSymbol: {
 				value: {
 					includeGoroot: false
@@ -887,7 +887,7 @@
 	test('Test Completion Snippets For Functions', async () => {
 		const provider = new GoCompletionItemProvider();
 		const uri = vscode.Uri.file(path.join(fixturePath, 'completions', 'snippets.go'));
-		const baseConfig = vscode.workspace.getConfiguration('go');
+		const baseConfig = getGoConfig();
 		const textDocument = await vscode.workspace.openTextDocument(uri);
 		const editor = await vscode.window.showTextDocument(textDocument);
 
@@ -1081,7 +1081,7 @@
 	test('Test No Completion Snippets For Functions', async () => {
 		const provider = new GoCompletionItemProvider();
 		const uri = vscode.Uri.file(path.join(fixturePath, 'completions', 'nosnippets.go'));
-		const baseConfig = vscode.workspace.getConfiguration('go');
+		const baseConfig = getGoConfig();
 		const textDocument = await vscode.workspace.openTextDocument(uri);
 		const editor = await vscode.window.showTextDocument(textDocument);
 
@@ -1146,7 +1146,7 @@
 	});
 
 	test('Test Completion on unimported packages', async () => {
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			autocompleteUnimportedPackages: { value: true }
 		});
 		const provider = new GoCompletionItemProvider();
@@ -1177,7 +1177,7 @@
 	});
 
 	test('Test Completion on unimported packages (multiple)', async () => {
-		const config = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config = Object.create(getGoConfig(), {
 			gocodeFlags: { value: ['-builtin'] }
 		});
 		const provider = new GoCompletionItemProvider();
@@ -1293,7 +1293,7 @@
 				}
 				fmt.Print("Go!")
 			}`;
-		const goConfig = Object.create(vscode.workspace.getConfiguration('go'), {
+		const goConfig = Object.create(getGoConfig(), {
 			playground: { value: { run: true, openbrowser: false, share: false } }
 		});
 
@@ -1325,7 +1325,7 @@
 				}
 				fmt.Print("Go!")
 			}`;
-		const goConfig = Object.create(vscode.workspace.getConfiguration('go'), {
+		const goConfig = Object.create(getGoConfig(), {
 			playground: { value: { run: true, openbrowser: false, share: true } }
 		});
 
@@ -1355,7 +1355,7 @@
 			func fantasy() {
 				fmt.Print("not a main package, sorry")
 			}`;
-		const goConfig = Object.create(vscode.workspace.getConfiguration('go'), {
+		const goConfig = Object.create(getGoConfig(), {
 			playground: { value: { run: true, openbrowser: false, share: false } }
 		});
 
@@ -1417,7 +1417,7 @@
 	});
 
 	test('Test Tags checking', async () => {
-		const config1 = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config1 = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'off' },
 			lintOnSave: { value: 'off' },
 			buildOnSave: { value: 'package' },
@@ -1425,21 +1425,21 @@
 			buildTags: { value: 'randomtag' }
 		});
 
-		const config2 = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config2 = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'off' },
 			lintOnSave: { value: 'off' },
 			buildOnSave: { value: 'package' },
 			testTags: { value: 'randomtag' }
 		});
 
-		const config3 = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config3 = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'off' },
 			lintOnSave: { value: 'off' },
 			buildOnSave: { value: 'package' },
 			testTags: { value: 'randomtag othertag' }
 		});
 
-		const config4 = Object.create(vscode.workspace.getConfiguration('go'), {
+		const config4 = Object.create(getGoConfig(), {
 			vetOnSave: { value: 'off' },
 			lintOnSave: { value: 'off' },
 			buildOnSave: { value: 'package' },
diff --git a/test/integration/install.test.ts b/test/integration/install.test.ts
index d73350d..879aa19 100644
--- a/test/integration/install.test.ts
+++ b/test/integration/install.test.ts
@@ -13,6 +13,7 @@
 import url = require('url');
 import util = require('util');
 import vscode = require('vscode');
+import { getGoConfig } from '../../src/config';
 import { toolInstallationEnvironment } from '../../src/goEnv';
 import { installTools } from '../../src/goInstallTools';
 import { allToolsInformation, getConfiguredTools, getTool, getToolAtVersion } from '../../src/goTools';
@@ -70,7 +71,7 @@
 		let configStub: sinon.SinonStub;
 		if (withLocalProxy) {
 			proxyDir = buildFakeProxy([].concat(...testCases));
-			const goConfig = Object.create(vscode.workspace.getConfiguration('go'), {
+			const goConfig = Object.create(getGoConfig(), {
 				toolsEnvVars: {
 					value: {
 						GOPROXY: url.pathToFileURL(proxyDir),
diff --git a/test/integration/test.test.ts b/test/integration/test.test.ts
index 670a8bc..27ef442 100644
--- a/test/integration/test.test.ts
+++ b/test/integration/test.test.ts
@@ -135,7 +135,7 @@
 		input: { isMod: boolean, includeSubDirectories: boolean, testFlags?: string[], applyCodeCoverage?: boolean },
 		wantFiles: string[]) {
 
-		const config = Object.create(vscode.workspace.getConfiguration('go'));
+		const config = Object.create(getGoConfig());
 		const outputChannel = new FakeOutputChannel();
 
 		const testConfig = {
