动态将参数,参数类型和参数值添加到JAVA / ANDROID中的方法

时间:2018-10-01 17:28:04

标签: java android

如何在Java中向方法动态添加参数,参数类型和参数值。

下面提供的是一个测试用例方法名称 testBlockTest104 的示例。类似地,有1000个tescases。我可以在运行时使用反射来获取方法名称,但无法获得动态添加参数的方法,参数类型和参数值。 我的目的是要运行成千上万个测试用例,它们的方法名称,参数类型及其值基于参数的数量和类型而有所不同。

基本上传递变量参数数字,getMethod()中的类型和.invoke()方法中的值。

 String methodName = "testBlockTest104";


 try {
       Method m  = testBlock.getClass().getMethod(methodName, testParam1.unit1.class, testParam2.unit2.class,resultcallback.result.class);

 try {
          m.invoke(testBlock, unit1_value, unit2_value,resultcallback_val);
      }
  catch(Exception ex)
  {
      Log.i("Exception=> " + ex.getMessage());
   }
 } catch (SecurityException e1) {
                Log.i("Exception=> " + e1.getMessage());
   }
 catch (NoSuchMethodException e2) {
   Log.i("Exception=> " + e2.getMessage());
    }

我已经成功地通过反射调用了一个方法(通过从文本文件中读取方法名称)。但是我想要实现这一点。

Purpose 1: 

这是二进制(exe / apk)形式提供给测试人员的一个Test Engine框架的一部分,其中测试用例的类型可以由测试人员提供(采用xml格式。测试人员不了解代码) )xml将由测试引擎(上面的代码)进行解析,并基于该引擎派生方法。

例如下面的XML:

<test-id-103>
<method-name>
  <method-params>

  </method-params>

  <method-types>

</method-types>
<method-values>
</method-values>
</method-name>
</test-id-103>




 Purpose 2:

好的,所以上面的目的在某些人看来可能并不合理,因此我记下了这种方法的另一个目的。尽管更多的是项目管理方面的,而不是技术方面的。编写此测试引擎的开发人员将离开公司,他将要编写的静态测试用例(如果不是这种方法)将类似于编写具有固定硬编码值的测试用例,一旦他离开就无法再更改。因此,通过上述方法,测试人员可以传递任何值,任何参数喜欢给定的测试用例,因此不依赖开发人员的代码。整个XML将被解析为一个大缓冲区,该缓冲区将在运行测试用例时进行解析(我认为这不会花费很多时间)。可以通过编辑一个简单的xml文件来自定义测试用例。这只是我提到的目的的顶层视图。

1 个答案:

答案 0 :(得分:1)

可以将带有可变参数的ANy参数(如getMethod)传递给数组。因此,您可以创建Class [],将所有参数Class对象放入其中,然后将其传递给getMethod。相同。

尽管我真的认为您应该重新考虑这种方法。使用这种基于xml的方法会使您的测试变得更加缓慢和复杂,而没有真正的好处。它甚至不像您可以将其传递给非程序员来编写测试,因为用户仍然需要了解足够的编程知识才能知道功能和参数是什么。您要做的只是减慢组织速度,因为运行测试套件将花费正常时间的10倍。