簡體   English   中英

更改 $*DISTRO 值以進行測試

[英]Changing $*DISTRO values for testing

我需要測試包含此行的功能:

if $translate-nl && $*DISTRO.is-win

我試圖為 $*DISTRO 重新分配一個值,

$*DISTRO='Windows 10';

但它說:

Cannot modify an immutable Distro (debian (9.stretch))␤

$*DISTRO是一個動態變量,它沒有被修改是有道理的。 也就是說,有沒有其他方法可以測試代碼(當然,除了去 Windows)

my $*DISTRO = ...

希望修改原件是不必要的。 這通常是不合理的遠距離行動——幾乎可以肯定,如果有人安排它成為一個不可變的價值。 這就是全局變量名聲不佳的原因。

的:闡述raiph的回答*$*DISTRO標記它作為一個動態變量。 您可以在任何范圍內重新聲明它,從那里調用的代碼將看到重新聲明的值:

{
    my $*DISTRO = ...;
    # coded called from here sees the redeclared value
}
# code called from here sees the original value

現在,問題仍然存在,你用什么來代替這些討厭的...

在最簡單的情況下,一個只包含被測代碼所需的模擬:

{
    my class Distro { has $.is-win }
    my $*DISTRO = Distro.new( :is-win );
    # call your test code here
}

如果代碼需要Distro更多屬性,只需將它們添加到模擬Distro類中即可。

如果代碼需要一個“真正的* Distro對象,出於某種原因,您可以實例化內置對象。構造函數.new並沒有真正記錄在案,但源代碼使其期望的參數非常明顯

好的,我比較快地得到了答案。 $*DISTRO實際上是PROCESS::<$DISTRO>的只讀別名

所以我們只需要做:

my $*DISTRO = Distro.new(:is-win,:release<11>,:path-sep('|||'),:auth<unknown>,:name<mswin32>,:desc<Test>,:version<v11>);
say $*DISTRO.is-win; #OUTPUT: «True␤»

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM