2015-11-19 122 views
3

我在写一个JUnit测试来测试我的应用程序。该应用程序使用Java编写,并使用purejavacomm库。为了测试串行解析器,我想设置一个虚拟串行端口,以便测试可以与解析器进行通信。除了简单的解析之外,它还可以动态连接到串行端口,因此我不想使用它,比如PipedInputStreamsocat两个串口一起

此库仅查找以ttySttyUSBttyACM开头的设备文件。正因为如此,我不能做常规(这将产生/dev/pts/x串口):

socat -d -d pty,raw,echo=0 pty,raw,echo=0 

我试图做:

socat /dev/ttyS20 /dev/ttyS21 

,但它不工作。它不会退出或打印错误。我试图用屏幕连接到/dev/ttyS20,但它只是说,[screen is terminating]

我查看了ttyS20(和21)的用户权限,他们都拥有我的用户在(chris)中的用户组dialout(user:root)。

我可以忽略权限吗?有没有更好的方法一起做到这一点?

+0

如果我以root身份运行(测试没有),我可以将'pty'符号链接到'ttyS's。我认为这就是'link ='标志虽然正确吗? –

+0

你不能简单[mock](https://en.wikipedia.org/wiki/Mock_object)purejavacomm类吗? – vlp

回答

1

您将要创建具有socat虚拟端口之后到新创建的pty链接到另一个位置

socat -u -u pty,raw,echo=0,link=/dev/ttyS20 pty,raw,echo=0,link=/dev/ttyS21 

,尝试改变管两端的所有权,以便更容易获得。

sudo chown user:user /dev/ttyS20 
sudo chown user:user /dev/ttyS21 

你也可以改变使用chmod的权限为777

+1

我不想使用'sudo',因为这需要root访问权限。我不希望我的测试以root身份运行。作为测试的一部分,测试将绑定这些串行端口。 –

+0

简单的事实,即串行端口具有组拨号'应该足以将它们连接在一起,我会认为... –

+0

你可以有端口已经设置?还是他们的创作必须成为你考试的一部分?我有几个系统,操作系统在启动时创建虚拟COM端口,然后具有普通用户权限的应用程序使用它们。你的测试不需要这样拥有root权限。 我相信有人可能会对我感到愁眉不展,但对于这类事情,我通常会写一个脚本,然后将它粘贴在/etc/rc.local中。 –

0

那么我的建议是在你的家目录下创建一个开发文件夹,并指向的链接出现。

socat pty,raw,echo=0,link=/home/user/dev/ttyS20 pty,raw,echo=0,link=/home/user/dev/ttyS21 

你应该能够访问没有根。如果它是单向通信,我通常喜欢添加-u选项。

+0

我无法在主目录中创建一个开发文件夹,这是因为该库只搜索/ dev中的东西。 –