diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index bee1e63..51b791f 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -1878,6 +1878,7 @@
 		self.assertEqual(pe.references[1].reference_name, so.name)
 		self.assertEqual(pe.references[1].allocated_amount, 300)
 
+	@change_settings("Stock Settings", {"enable_stock_reservation": 1})
 	def test_stock_reservation_against_sales_order(self) -> None:
 		from random import randint, uniform
 
@@ -1890,7 +1891,6 @@
 		from erpnext.stock.doctype.stock_reservation_entry.test_stock_reservation_entry import (
 			create_items,
 			create_material_receipts,
-			update_stock_settings,
 		)
 
 		items_details, warehouse = create_items(), "_Test Warehouse - _TC"
@@ -1914,106 +1914,102 @@
 			warehouse="_Test Warehouse - _TC",
 		)
 
-		# Test - 1: `ValidationError` should be thrown, if Stock Reservation is disabled in Stock Settings.
-		update_stock_settings("enable_stock_reservation", 0)
-		self.assertRaises(frappe.ValidationError, so.create_stock_reservation_entries)
+		# Test - 1: Stock should not be reserved if the Available Qty to Reserve is less than the Ordered Qty and Partial Reservation is disabled in Stock Settings.
+		with change_settings("Stock Settings", {"allow_partial_reservation": 0}):
+			so.create_stock_reservation_entries()
+			self.assertFalse(has_reserved_stock("Sales Order", so.name))
 
-		# Enable Stock Reservation.
-		update_stock_settings("enable_stock_reservation", 1)
+		# Test - 2: Stock should be Partially Reserved if the Partial Reservation is enabled in Stock Settings.
+		with change_settings("Stock Settings", {"allow_partial_reservation": 1}):
+			so.create_stock_reservation_entries()
+			so.load_from_db()
+			self.assertTrue(has_reserved_stock("Sales Order", so.name))
 
-		# Test - 2: Stock should not be reserved if the Available Qty to Reserve is less than the Ordered Qty and Partial Reservation is disabled in Stock Settings.
-		update_stock_settings("allow_partial_reservation", 0)
-		so.create_stock_reservation_entries()
-		self.assertFalse(has_reserved_stock("Sales Order", so.name))
+			for item in so.items:
+				sre_details = get_stock_reservation_entries_for_voucher(
+					"Sales Order", so.name, item.name, fields=["reserved_qty", "status"]
+				)
+				self.assertEqual(item.stock_reserved_qty, sre_details[0].reserved_qty)
+				self.assertEqual(sre_details[0].status, "Partially Reserved")
 
-		# Test - 3: Stock should be Partially Reserved if the Partial Reservation is enabled in Stock Settings.
-		update_stock_settings("allow_partial_reservation", 1)
-		so.create_stock_reservation_entries()
-		so.load_from_db()
-		self.assertTrue(has_reserved_stock("Sales Order", so.name))
+			# Test - 3: Stock should be fully Reserved if the Available Qty to Reserve is greater than the Un-reserved Qty.
+			create_material_receipts(items_details, warehouse, qty=100)
+			so.create_stock_reservation_entries()
+			so.load_from_db()
 
-		for item in so.items:
-			sre_details = get_stock_reservation_entries_for_voucher(
-				"Sales Order", so.name, item.name, fields=["reserved_qty", "status"]
+			reserved_qty_details = get_sre_reserved_qty_details_for_voucher("Sales Order", so.name)
+			for item in so.items:
+				reserved_qty = reserved_qty_details[(item.name, item.warehouse)]
+				self.assertEqual(item.stock_reserved_qty, reserved_qty)
+				self.assertEqual(item.stock_qty, item.stock_reserved_qty)
+
+			# Test - 4: Stock should get unreserved on cancellation of Stock Reservation Entries.
+			cancel_stock_reservation_entries("Sales Order", so.name)
+			so.load_from_db()
+			self.assertFalse(has_reserved_stock("Sales Order", so.name))
+
+			for item in so.items:
+				self.assertEqual(item.stock_reserved_qty, 0)
+
+			# Test - 5: Re-reserve the stock.
+			so.create_stock_reservation_entries()
+			self.assertTrue(has_reserved_stock("Sales Order", so.name))
+
+			# Test - 6: Stock should get unreserved on cancellation of Sales Order.
+			so.cancel()
+			so.load_from_db()
+			self.assertFalse(has_reserved_stock("Sales Order", so.name))
+
+			for item in so.items:
+				self.assertEqual(item.stock_reserved_qty, 0)
+
+			# Create Sales Order and Reserve Stock.
+			so = make_sales_order(
+				item_list=item_list,
+				warehouse="_Test Warehouse - _TC",
 			)
-			self.assertEqual(item.stock_reserved_qty, sre_details[0].reserved_qty)
-			self.assertEqual(sre_details[0].status, "Partially Reserved")
+			so.create_stock_reservation_entries()
 
-		# Test - 4: Stock should be fully Reserved if the Available Qty to Reserve is greater than the Un-reserved Qty.
-		create_material_receipts(items_details, warehouse, qty=100)
-		so.create_stock_reservation_entries()
-		so.load_from_db()
+			# Test - 7: Partial Delivery against Sales Order.
+			dn1 = make_delivery_note(so.name)
 
-		reserved_qty_details = get_sre_reserved_qty_details_for_voucher("Sales Order", so.name)
-		for item in so.items:
-			reserved_qty = reserved_qty_details[(item.name, item.warehouse)]
-			self.assertEqual(item.stock_reserved_qty, reserved_qty)
-			self.assertEqual(item.stock_qty, item.stock_reserved_qty)
+			for item in dn1.items:
+				item.qty = flt(uniform(1, 10), 0 if item.stock_uom == "Nos" else 3)
 
-		# Test - 5: Stock should get unreserved on cancellation of Stock Reservation Entries.
-		cancel_stock_reservation_entries("Sales Order", so.name)
-		so.load_from_db()
-		self.assertFalse(has_reserved_stock("Sales Order", so.name))
+			dn1.save()
+			dn1.submit()
 
-		for item in so.items:
-			self.assertEqual(item.stock_reserved_qty, 0)
+			for item in so.items:
+				sre_details = get_stock_reservation_entries_for_voucher(
+					"Sales Order", so.name, item.name, fields=["delivered_qty", "status"]
+				)
+				self.assertGreater(sre_details[0].delivered_qty, 0)
+				self.assertEqual(sre_details[0].status, "Partially Delivered")
 
-		# Test - 6: Re-reserve the stock.
-		so.create_stock_reservation_entries()
-		self.assertTrue(has_reserved_stock("Sales Order", so.name))
+			# Test - 8: Over Delivery against Sales Order, SRE Delivered Qty should not be greater than the SRE Reserved Qty.
+			with change_settings("Stock Settings", {"over_delivery_receipt_allowance": 100}):
+				dn2 = make_delivery_note(so.name)
 
-		# Test - 7: Stock should get unreserved on cancellation of Sales Order.
-		so.cancel()
-		so.load_from_db()
-		self.assertFalse(has_reserved_stock("Sales Order", so.name))
+				for item in dn2.items:
+					item.qty += flt(uniform(1, 10), 0 if item.stock_uom == "Nos" else 3)
 
-		for item in so.items:
-			self.assertEqual(item.stock_reserved_qty, 0)
+				dn2.save()
+				dn2.submit()
 
-		# Create Sales Order and Reserve Stock.
-		so = make_sales_order(
-			item_list=item_list,
-			warehouse="_Test Warehouse - _TC",
-		)
-		so.create_stock_reservation_entries()
+			for item in so.items:
+				sre_details = frappe.db.get_all(
+					"Stock Reservation Entry",
+					filters={
+						"voucher_type": "Sales Order",
+						"voucher_no": so.name,
+						"voucher_detail_no": item.name,
+					},
+					fields=["status", "reserved_qty", "delivered_qty"],
+				)
 
-		# Test - 8: Partial Delivery against Sales Order.
-		dn1 = make_delivery_note(so.name)
-
-		for item in dn1.items:
-			item.qty = flt(uniform(1, 10), 0 if item.stock_uom == "Nos" else 3)
-
-		dn1.save()
-		dn1.submit()
-
-		for item in so.items:
-			sre_details = get_stock_reservation_entries_for_voucher(
-				"Sales Order", so.name, item.name, fields=["delivered_qty", "status"]
-			)
-			self.assertGreater(sre_details[0].delivered_qty, 0)
-			self.assertEqual(sre_details[0].status, "Partially Delivered")
-
-		# Test - 9: Over Delivery against Sales Order, SRE Delivered Qty should not be greater than the SRE Reserved Qty.
-		update_stock_settings("over_delivery_receipt_allowance", 100)
-		dn2 = make_delivery_note(so.name)
-
-		for item in dn2.items:
-			item.qty += flt(uniform(1, 10), 0 if item.stock_uom == "Nos" else 3)
-
-		dn2.save()
-		dn2.submit()
-		update_stock_settings("over_delivery_receipt_allowance", 0)
-
-		for item in so.items:
-			sre_details = frappe.db.get_all(
-				"Stock Reservation Entry",
-				filters={"voucher_type": "Sales Order", "voucher_no": so.name, "voucher_detail_no": item.name},
-				fields=["status", "reserved_qty", "delivered_qty"],
-			)
-
-			for sre_detail in sre_details:
-				self.assertEqual(sre_detail.reserved_qty, sre_detail.delivered_qty)
-				self.assertEqual(sre_detail.status, "Delivered")
+				for sre_detail in sre_details:
+					self.assertEqual(sre_detail.reserved_qty, sre_detail.delivered_qty)
+					self.assertEqual(sre_detail.status, "Delivered")
 
 
 def automatically_fetch_payment_terms(enable=1):
diff --git a/erpnext/stock/doctype/stock_reservation_entry/test_stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/test_stock_reservation_entry.py
index 8dfd9d9..4d922be 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/test_stock_reservation_entry.py
+++ b/erpnext/stock/doctype/stock_reservation_entry/test_stock_reservation_entry.py
@@ -2,7 +2,7 @@
 # See license.txt
 
 import frappe
-from frappe.tests.utils import FrappeTestCase
+from frappe.tests.utils import FrappeTestCase, change_settings
 
 
 class TestStockReservationEntry(FrappeTestCase):
@@ -25,18 +25,17 @@
 		)
 
 		# Case - 1: When `Stock Reservation` is disabled in `Stock Settings`, throw `ValidationError`
-		update_stock_settings("enable_stock_reservation", 0)
-		self.assertRaises(frappe.ValidationError, validate_stock_reservation_settings, voucher)
+		with change_settings("Stock Settings", {"enable_stock_reservation": 0}):
+			self.assertRaises(frappe.ValidationError, validate_stock_reservation_settings, voucher)
 
-		# Case - 2: When `Voucher Type` is not allowed for `Stock Reservation`, throw `ValidationError`
-		update_stock_settings("enable_stock_reservation", 1)
-		voucher.doctype = "NOT ALLOWED"
-		self.assertRaises(frappe.ValidationError, validate_stock_reservation_settings, voucher)
+		with change_settings("Stock Settings", {"enable_stock_reservation": 1}):
+			# Case - 2: When `Voucher Type` is not allowed for `Stock Reservation`, throw `ValidationError`
+			voucher.doctype = "NOT ALLOWED"
+			self.assertRaises(frappe.ValidationError, validate_stock_reservation_settings, voucher)
 
-		# Case - 3: When `Stock Reservation` is enabled and `Voucher Type` is allowed
-		update_stock_settings("enable_stock_reservation", 1)
-		voucher.doctype = "Sales Order"
-		self.assertIsNone(validate_stock_reservation_settings(voucher), None)
+			# Case - 3: When `Voucher Type` is allowed for `Stock Reservation`
+			voucher.doctype = "Sales Order"
+			self.assertIsNone(validate_stock_reservation_settings(voucher), None)
 
 	def test_get_available_qty_to_reserve(self) -> None:
 		from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
@@ -106,15 +105,13 @@
 		sre.load_from_db()
 		self.assertEqual(sre.status, "Cancelled")
 
+	@change_settings("Stock Settings", {"enable_stock_reservation": 1})
 	def test_update_reserved_qty_in_voucher(self) -> None:
 		from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
 
 		item_code, warehouse = "SR Item 1", "_Test Warehouse - _TC"
 
-		# Step - 1: Enable `Stock Reservation`
-		update_stock_settings("enable_stock_reservation", 1)
-
-		# Step - 2: Create a `Sales Order`
+		# Step - 1: Create a `Sales Order`
 		so = make_sales_order(
 			item_code=item_code,
 			warehouse=warehouse,
@@ -127,7 +124,7 @@
 		so.save()
 		so.submit()
 
-		# Step - 3: Create a `Stock Reservation Entry[1]` for the `Sales Order Item`
+		# Step - 2: Create a `Stock Reservation Entry[1]` for the `Sales Order Item`
 		sre1 = make_stock_reservation_entry(
 			item_code=item_code,
 			warehouse=warehouse,
@@ -142,7 +139,7 @@
 		self.assertEqual(sre1.status, "Partially Reserved")
 		self.assertEqual(so.items[0].stock_reserved_qty, sre1.reserved_qty)
 
-		# Step - 4: Create a `Stock Reservation Entry[2]` for the `Sales Order Item`
+		# Step - 3: Create a `Stock Reservation Entry[2]` for the `Sales Order Item`
 		sre2 = make_stock_reservation_entry(
 			item_code=item_code,
 			warehouse=warehouse,
@@ -157,14 +154,14 @@
 		self.assertEqual(sre1.status, "Partially Reserved")
 		self.assertEqual(so.items[0].stock_reserved_qty, sre1.reserved_qty + sre2.reserved_qty)
 
-		# Step - 5: Cancel `Stock Reservation Entry[1]`
+		# Step - 4: Cancel `Stock Reservation Entry[1]`
 		sre1.cancel()
 		so.load_from_db()
 		sre1.load_from_db()
 		self.assertEqual(sre1.status, "Cancelled")
 		self.assertEqual(so.items[0].stock_reserved_qty, sre2.reserved_qty)
 
-		# Step - 6: Cancel `Stock Reservation Entry[2]`
+		# Step - 5: Cancel `Stock Reservation Entry[2]`
 		sre2.cancel()
 		so.load_from_db()
 		sre2.load_from_db()
@@ -172,10 +169,6 @@
 		self.assertEqual(so.items[0].stock_reserved_qty, 0)
 
 
-def update_stock_settings(field: str, value: any) -> None:
-	frappe.db.set_single_value("Stock Settings", field, value)
-
-
 def create_items() -> dict:
 	from erpnext.stock.doctype.item.test_item import make_item
 
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index d357118..c9b75a1 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -103,6 +103,10 @@
 	def validate_stock_reservation(self):
 		"""Raises an exception if the user tries to enable/disable `Stock Reservation` with `Negative Stock` or `Open Stock Reservation Entries`."""
 
+		# Skip validation for tests
+		if frappe.flags.in_test:
+			return
+
 		db_allow_negative_stock = frappe.db.get_single_value("Stock Settings", "allow_negative_stock")
 		db_enable_stock_reservation = frappe.db.get_single_value(
 			"Stock Settings", "enable_stock_reservation"
