前提・実現したいこと
UnityTestRunnerを使う上でのテストコードを作成するにあたって、
privateな構造体のメンバへアクセス(値の設定、取得)したいです。
発生している問題・エラーメッセージ
privateな構造体のメンバへの方法がわかりません。教えてください。。
該当のソースコード
c#
1// testTargetScript.cs(テストしたい関数をもってるスクリプト) 2public class testTargetScript 3{ 4 private int intVal;//privateな変数へのアクセスはできました。 5 6 //↓アクセスしたいメンバをもってる構造体 7 private Struct 8 { 9 public bool member1; 10 public bool member2; 11 } 12 13 Struct s = new Struct(); 14 15 private testTargetMethod() 16 { 17 if(s.member) 18 { 19 : 20 ~略~ 21 : 22 s.member = false; 23 } 24 } 25}
c#
1// testCode.cs 2public class testCode 3{ 4 public testTestTargetMethod() 5 { 6 var classInstance = new testTargetScript(); 7 var structInstance = typeof(testTargetScript) 8 .GetField("s", BindingFlags.Instance, BindingFlags.NonPublic) 9 .GetValue(classInstance); 10 var inputForTest = structInstance.GetType() 11 .GetField("member1", BindingFlags.Instance, BindingFlags.Public) 12 inputForTest.SetValue(structInstance,true); 13 14 var targetMethod = typeof(testTargetScript) 15 .GetMethod("testTargetMethod", BindingFlags, BindingFlags.NonPublic) 16 .Invoke(classInstance,null); 17 //↑このメソッドコールによってs.memberがfalseに書き換わるはず! 18 19 bool result = (bool)inputForTest.GetValue(structInstance); 20 //↑このresultに格納される値がfalseにならない。。。 21 } 22}
試したこと
privateな変数にアクセスする際は下記のように行いました。
System.Type typeOfTargetClass = typeof(testTargetScript);//アクセスしたいメソッドを持つクラスの型を取得
object instanceOfTargetClassType = System.Activator.CreateInstance(typeOfTargetClass);
FieldInfo targetValiable = typeOfTargetClass.GetField("intVal",
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.NonPublic);
targetValiable.SetValue(instanceOfTargetClassType, value);//値の設定(valueはintValに設定したい値とする。)
構造体はどうやればいいのか1時間くらい調べてもわからなかったため質問を投稿しました。
よろしくお願いします!
回答1件
あなたの回答
tips
プレビュー