测试...外部指针访问private

 

 

 

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 
 6 class A{
 7 public:
 8     int* getPointer(){
 9         return &m;
10     }
11     void out(){
12         cout<<"m = "<<m<<endl;
13     }
14 private:
15     int m;    
16     
17 };
18 
19 int main(){
20     int *p = nullptr;
21     A a;
22     
23     p = a.getPointer();
24     
25     *p = 3;
26     
27     
28     a.out();
29 } 

 

转载于:https://www.cnblogs.com/Agravity/p/5143917.html

### java单元测试中解决NullPointerException的方案 在Java单元测试中,`java.lang.NullPointerException` 是一种常见的运行时异常,通常由于尝试访问或操作一个未初始化的对象或变量引起。以下是一些有效的解决方案和建议,以帮助开发者避免或解决此类问题。 #### 1. 确保字符串变量已正确初始化 如果字符串变量未被显式初始化,则其默认值为 `null`。在使用字符串之前,请确保对其进行初始化[^1]。例如: ```java String str = "Initialized"; if (str != null && str.equals("Test")) { // 安全地执行逻辑 } ``` #### 2. 避免接口类型对象未实例化的问题 当声明了一个接口类型的变量但未为其分配具体的实现类实例时,也会导致空指针异常。确保所有接口类型的变量都已正确初始化[^1]。例如: ```java Map<String, String> map = new HashMap<>(); map.put("key", "value"); ``` #### 3. 在操作对象前检查是否为空 在调用对象的方法或访问其属性之前,始终检查该对象是否为 `null`。这样可以有效防止空指针异常。例如: ```java if (object != null) { object.doSomething(); } ``` #### 4. 正确比较字符串 当需要比较字符串与常量值时,应避免直接调用字符串对象的 `equals` 方法,因为这可能导致空指针异常。相反,应该将常量放在左侧进行比较。例如: ```java String str = null; if ("Test".equals(str)) { // 安全地执行逻辑 } ``` #### 5. 使用 `String.valueOf()` 替代 `toString()` 当需要获取对象的字符串表示形式时,优先使用 `String.valueOf()` 方法,因为它能够安全地处理 `null` 值,而不会抛出异常。例如: ```java Object obj = null; String result = String.valueOf(obj); // 输出 "null" ``` #### 6. 确保类实例已正确初始化 如果某个类被声明但未实例化,则在调用其方法时会引发空指针异常。因此,在使用类实例之前,请确保它已被正确初始化[^1]。例如: ```java MyClass myClass = new MyClass(); myClass.performAction(); ``` #### 7. 避免返回 `null` 的方法 在设计方法时,尽量避免返回 `null`,尤其是在集合或数组场景下。可以考虑返回空集合或空数组,以减少空指针异常的发生概率。例如: ```java public List<String> getData() { return Collections.emptyList(); // 返回空集合而不是 null } ``` #### 8. 使用Mock框架模拟依赖 在单元测试中,使用Mock框架(如 Mockito)来模拟外部依赖的行为,从而避免因依赖未初始化而导致的空指针异常[^2]。例如: ```java @Service class MyService { private final MyRepository repository; public MyService(MyRepository repository) { this.repository = repository; } public String fetchData() { return repository.getData(); } } // 测试代码 @Test void testFetchData() { MyRepository mockRepository = Mockito.mock(MyRepository.class); Mockito.when(mockRepository.getData()).thenReturn("Mocked Data"); MyService service = new MyService(mockRepository); String result = service.fetchData(); Assertions.assertEquals("Mocked Data", result); } ``` #### 9. 检查Spring上下文加载 如果在Spring Boot项目中进行单元测试时遇到空指针异常,可能是因为测试环境未能正确加载Spring上下文。可以通过添加 `@SpringBootTest` 或 `@ContextConfiguration` 注解来确保上下文被正确加载。例如: ```java @SpringBootTest class MyServiceTest { @Autowired private MyService myService; @Test void testService() { String result = myService.fetchData(); Assertions.assertNotNull(result); } } ``` ### 总结 通过以上方法,可以显著降低在Java单元测试中出现 `java.lang.NullPointerException` 的风险。关键在于对潜在的 `null` 引用保持警惕,并采取适当的措施进行防御性编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值