小编Sam*_*m ツ的帖子

用于验证的设计模式

我相信我不是唯一一个面临这个问题的人,但到目前为止我无法找到解决办法.问题如下.

我从遗留系统发布了一个Web服务(我没有任何控制权,我无法更改它),并且所有客户端都在使用它.我收到来自Web服务和对象的请求,我得到的是一个非常复杂的请求但是为了举例说明我从Web服务调用接收对象A,其中包含其他几个对象,如对象B,对象C等等.另外,对象B和C也有一些原始数据类型以及其中的一些其他对象.我的问题是我要验证整个对象A(所有包括对象和子对象),这里推荐哪种设计模式?其次,这里的要点是我可以从Web服务获得不同类型的对象A. 我不同类型的对象A的真正含义是对象A依赖于客户端,即一些客户端将发送对象A而不填充包含对象B中的数据,或者甚至可以部分填充对象B然后在对象A中发送它所以我必须基于客户端验证对象A(因为一些客户端需要包含对象B,有些不会,有些将需要对象B中的少量元素等).所以换句话说,我将有一个地方,我也将存储每个客户端的验证规则,这将告诉我这样的事情,客户端ABC希望对象B中的字段abc是字符串类型,最大长度是25个字符,它必须在该字段中包含数据.

我想要执行的一些验证是

检查某些对象的字段(比如对象B)的数据类型,特定字段的长度,是该客户端所需的字段,还是可选的等等...

任何具体的工作示例都非常有用.

该特定示例的对象A的结构如下.

    public class A
    {
        private B objectB;
        private C objectC;
        // and so on
    }

    public class B{
        private E objectE;
        private String name;
        private int age;
        // and so on
    } 

    public class C
    {
        private F objectF;
        private String address;
        private String country;
    }

    public class E
    {
        // Members here
    }

    public class F
    {
        // Members here
    }
Run Code Online (Sandbox Code Playgroud)

PS:我给了班级和成员任意的名字只是为了一般的理解.是的,我忘了提到我在这里使用java,但它并不重要,因为设计原则或模式可以应用于任何语言.希望很快能听到你们的意见.. :)

validation design-patterns

17
推荐指数
1
解决办法
2万
查看次数

使用EasyMock测试方法的异常

我是单元测试的新手.我正在使用TestNG和MyEclipse为我的应用程序开发单元测试用例.在这样做时,我遇到了EasyMock的一些问题.这是我的代码(出于安全原因,类的名称,方法名称和返回类型已更改,但您将清楚地了解我在此处尝试实现的目标).

    public MyClass
    {
       // This is a method in my class which calls a collaborator which I
       // want to mock in my test case
       public SomeObject findSomething(SomeOtherObject param) throws Exception
       {
          SomeOtherObject param a = myCollaborator.doSomething(param);
          // Do something with the object and then return it 
          return a;
       }
    }
Run Code Online (Sandbox Code Playgroud)

现在这是我的考试.现在我在测试用例中实际想要实现的是,我想检查我的函数(findSomething)是否正确抛出异常,以防抛出异常.将来,其他一些开发人员可以更改方法的签名(抛出异常不是方法签名的一部分),并从我的方法中删除抛出异常.那么我怎样才能确保没人改变呢?

@Test(dataProvider="mydataProvider", expectedExceptions=Exception.class)
public void MyTest(SomeOtherObject param) throws Exception {
{
  EasyMock.expect(myCollaboratorMock.doSomething(param)).andThrow(new Exception());
  EasyMock.replay(myCollaboratorMock);
}
Run Code Online (Sandbox Code Playgroud)

我越来越异常了

"java.lang.IllegalArgumentException:在mock上调用的最后一个方法不能抛出java.lang.Exception"

我在这做错了什么?有人可以阐明如何为我的特定场景编写测试用例吗?

java testng easymock exception

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

design-patterns ×1

easymock ×1

exception ×1

java ×1

testng ×1

validation ×1