Newer
Older
TIASShot / TIASshot.Tests / IoUtilSaveImageTests.cs
using System;
using System.IO;
using NUnit.Framework;
using OpenCvSharp;

namespace TIASshot.Tests {
    /// <summary>
    /// IoUtil.SaveImage のテスト.
    /// Cv2.ImWrite は保存失敗(存在しないフォルダ・ディスク満杯・権限等)で例外を出さず
    /// false を返すだけであり,戻り値を検査しないと保存失敗が無通知で成功扱いになる.
    /// SaveImage が失敗を false として正しく報告すること,および正常パスでは
    /// true を返して実際にファイルが生成されること(従来挙動の特性化)を検証する.
    /// </summary>
    [TestFixture]
    public class IoUtilSaveImageTests {

        private string _tempFolder;

        [SetUp]
        public void SetUp() {
            _tempFolder = Path.Combine(Path.GetTempPath(), "TIASshotTests_" + Guid.NewGuid().ToString("N"));
            Directory.CreateDirectory(_tempFolder);
        }

        [TearDown]
        public void TearDown() {
            if (Directory.Exists(_tempFolder)) {
                Directory.Delete(_tempFolder, recursive: true);
            }
        }

        /// <summary>
        /// 存在しないフォルダへの保存は false を返す(保存失敗が無通知で成功扱いにならない)
        /// </summary>
        [Test]
        public void SaveImage_存在しないフォルダ_falseを返す() {
            // Arrange
            var path = Path.Combine(_tempFolder, "no_such_dir", "out.png");
            using (var img = new Mat(4, 4, MatType.CV_8UC3, Scalar.All(128))) {

                // Act
                var result = IoUtil.SaveImage(path, img);

                // Assert
                Assert.IsFalse(result, "存在しないフォルダへの保存失敗が false で報告されること");
                Assert.IsFalse(File.Exists(path), "ファイルが生成されていないこと");
            }
        }

        /// <summary>
        /// 正常なパスへの保存は true を返しファイルが生成される(従来挙動の特性化)
        /// </summary>
        [Test]
        public void SaveImage_正常なパス_trueを返しファイルが生成される() {
            // Arrange
            var path = Path.Combine(_tempFolder, "out.png");
            using (var img = new Mat(4, 4, MatType.CV_8UC3, Scalar.All(128))) {

                // Act
                var result = IoUtil.SaveImage(path, img);

                // Assert
                Assert.IsTrue(result, "正常な保存では true を返すこと");
                Assert.IsTrue(File.Exists(path), "ファイルが生成されていること");
            }
        }
    }
}