1.21 jigowatts

Great Scott!

【C#】MoqのQuickstartをやってみる

参考
https://github.com/Moq/moq4/wiki/Quickstart

Methods

まずはこの辺のメソッドを押さえておけばいいのかな。

  1. Returns
  2. Throws
  3. Callback
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

namespace MoqQuickStart
{
    [TestClass]
    public class Methods
    {
        [TestMethod]
        public void Practice()
        {
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

            var f = mock.Object;
            Assert.IsFalse(f.DoSomething("pong"));
            Assert.IsTrue(f.DoSomething("ping"));
        }

        [TestMethod]
        public void Out_argument()
        {
            var outString = "ack";
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.TryParse("ping", out outString)).Returns(true);

            var f = mock.Object;
            Assert.IsFalse(f.TryParse("pong", out outString));
            Assert.IsTrue(f.TryParse("ping", out outString));
        }

        [TestMethod]
        public void Ref_argument()
        {
            var instance = new Bar();
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.Submit(ref instance)).Returns(true);

            var f = mock.Object;
            Assert.IsTrue(f.Submit(ref instance));
        }

        [TestMethod]
        public void Access_invocation_arguments_when_returning_a_value()
        {
            var mock = new Mock<IFoo>();
            mock.Setup(x => x.DoSomethingStringy(It.IsAny<string>()))
                                        .Returns((string s) => s.ToLower());
            var f = mock.Object;
            var actual = f.DoSomethingStringy("HOGE");

            Assert.AreEqual("hoge", actual);
        }

        [TestMethod]
        [ExpectedException(typeof(InvalidOperationException))]
        public void Throwing_when_invoked_with_specific_parameters_1()
        {
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.DoSomething("reset")).Throws<InvalidOperationException>();
            mock.Object.DoSomething("reset");
            Assert.Fail();
        }

        [TestMethod]
        public void Throwing_when_invoked_with_specific_parameters_2()
        {
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.DoSomething("")).Throws(new ArgumentException("command"));

            try
            {
                mock.Object.DoSomething("");
                Assert.Fail();
            }
            catch (ArgumentException ex)
            {
                Assert.AreEqual("command",ex.Message);
            }
        }

        [TestMethod]
        public void Lazy_evaluating_return_value()
        {
            var count = 1;
            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.GetCount()).Returns(() => count);

            var actual = mock.Object.GetCount();
            Assert.AreEqual(1, actual);
        }

        [TestMethod]
        public void Returning_different_values_on_each_invocation()
        {
            var mock = new Mock<IFoo>();
            var calls = 0;
            mock.Setup(foo => foo.GetCount())
                .Returns(() => calls)
                .Callback(() => calls++);

            Console.WriteLine(mock.Object.GetCount());
            Assert.AreEqual(1, calls);

            Console.WriteLine(mock.Object.GetCount());
            Assert.AreEqual(2, calls);
        }
    }
}

【PowerShell】ファイルのエンコードを変換して別ファイルに出力する

tips

たとえばカレントのSQLファイルがUTF-8エンコードされていたので、まとめてShift-JISに変換するとか。

> ls -Filter *.sql | ForEach-Object { $file = $_; Get-Content -Path $file -Encoding UTF8 | Out-File "rep_$file" -Encoding Default}

Jenkins で OutOfMemoryError : Java heap space

概要

ある日ジョブがコケてコンソールのログを見たらこのエラーが出てました。Jenkins使ってるとよくあることなのでしょうか。ヒープメモリが足りないのでjenkis.xmlの設定値を変更します。

環境
  • Windos 10
  • Jenkins 2.46.3

jenkins.xml

デフォルトでインストールしてるとJENKINS_HOME直下にあるっぽいです。私はCドライブにインストールしたのでC:\Jenkinsにありました。

f:id:sh_yoshida:20170622235830p:plain

-Xmxには256m(メガバイト)と指定されています。この値を変更して最大のヒープサイズを増やしてみましょう。

  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

環境によりますが、ひとまず1024mくらいを設定してみたところOutOfMemoryErrorは出なくなったので様子を見てみることに。3週間程度経過してますが、今のところ元気に動いています。

参考

Builds failing with OutOfMemoryErrors - Jenkins - Jenkins Wiki

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)